Linux任務的前後臺管理

良許linux發表於2019-02-18

Linux任務的前後臺管理

我們知道,Linux 是一個多工的作業系統,也就是說,在同一時間,系統可以執行多個任務。在帶介面的 Linux 發行版下,我們可以很輕鬆透過滑鼠來進行多工的切換。但是,在終端下,操作幾乎是脫離滑鼠的,如何進行任務的前後臺管理呢?

對於任務的管理,我們一般有如下幾個需求:

  • 將程式切換到後臺

  • 將程式切換到前臺

  • 檢視後臺任務

  • 終止後臺任務

為了演示這幾個需求,我們搬出偉大的 hello world 程式:

#include <stdio.h>

int main()
{
    while (1) {
        printf("hello world!\n");
        sleep(1);
    }
}

這個程式每隔 1s 就會輸出一句 hello world 。為了後面的演示,將它編譯並複製多份樣本:hello1, hello2, hello3。

讓程式在後臺執行,我們第一時間想到的就是 & 命令。我們可以先在後臺執行這三個程式。

[alvin@VM_0_16_centos test]$ ./hello1 > test1.txt &
[11788
[alvin@VM_0_16_centos test]$ ./hello2 > test2.txt &
[21801
[alvin@VM_0_16_centos test]$ ./hello3 > test3.txt &
[31844

現在有三個樣本在後臺跑了。我們如何檢視這幾個後臺任務呢?可以使用 jobs 命令。

[alvin@VM_0_16_centos test]$ jobs -l
[1]   1788 Running                 ./hello1 > test1.txt &
[2]-  1801 Running                 ./hello2 > test2.txt &
[3]+  1844 Running                 ./hello3 > test3.txt &

如果我們想把 hello2 調至前臺執行,我們可以這樣操作:

[alvin@VM_0_16_centos test]$ fg %2
./hello2 > test2.txt

其中,%後面跟的是後臺任務的序列,而不是程式ID。如果只有 fg 命令( bg 命令也一樣),而不跟引數,那麼將操作的是後臺任務列表裡的第一個任務,專業名詞叫 當前任務

我們會發現,這時程式會一直卡在終端。這時,我們可以使用 ctrl+z 將它再次切到後臺執行。

^Z
[2]+  Stopped                 ./hello2 > test2.txt
[alvin@VM_0_16_centos test]$ jobs -l
[1]   1788 Running                 ./hello1 > test1.txt &
[2]+  1801 Stopped                 ./hello2 > test2.txt
[3]-  1844 Running                 ./hello3 > test3.txt &

但是,我們會發現,test2 程式變成了 stopped 的狀態,我們也可以在後臺程式列表裡看到它的狀態。這也是 ctrl+z 命令的特點:將程式切換到後臺,並停止執行。

如果我們想讓它恢復執行,我們就可以使用 bg 命令了。

[alvin@VM_0_16_centos test]$ bg %2
[2]+ ./hello2 > test2.txt &
[alvin@VM_0_16_centos test]$ jobs -l
[1]   1788 Running                 ./hello1 > test1.txt &
[2]-  1801 Running                 ./hello2 > test2.txt &
[3]+  1844 Running                 ./hello3 > test3.txt &

如果我們想殺死某個後臺程式,我們可以使用 kill 命令。kill 命令的用法有兩種:

  1. kill pid

  2. kill %N

例如,我們要殺死 hello2 程式的話,可以這樣操作:

1kill 1801
2kill %2

執行完畢之後,它的狀態將變成 terminated 狀態:

[alvin@VM_0_16_centos test]$ kill 1801
[alvin@VM_0_16_centos test]$ jobs -l
[1]   1788 Running                 ./hello1 > test1.txt &
[2]-  1801 Terminated              ./hello2 > test2.txt
[3]+  1844 Running                 ./hello3 > test3.txt &

前臺、後臺任務確實可以給日常操作帶來方便。因為,我們在日常操作中肯定會遇到同一時間要進行多個操作。這個時候如果不使用前臺任務和後臺任務,那麼將要花費很多時間。熟練運用前臺和後臺任務能達到事半功倍。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908604/viewspace-2636301/,如需轉載,請註明出處,否則將追究法律責任。

相關文章