Unix/作業控制快速入門
Unix 中的程序 - 也就是正在執行特定任務的程式 - 可以執行在前臺或後臺。前臺作業會在當前 shell 中顯示,並且您無法與 shell 互動,直到作業完成或被中斷。後臺作業啟動後會立即返回到提示符,您可以在後臺程序繼續執行的同時輸入更多命令。後臺作業可以寫入當前終端視窗。
作業預設情況下會執行在前臺。
您可以選擇在後臺啟動作業,或者在作業啟動後將其傳送到後臺。
在啟動作業的命令末尾追加&。例如,我們可以使用 GNU C 編譯器在後臺編譯程式 hello,如下所示
% gcc hello.c -o hello &
如果您在前臺啟動了作業,可以將其移到後臺。首先,使用 Ctrl+Z 停止作業,然後使用bg命令將停止的作業傳送到後臺。例如,我們可以啟動 web 瀏覽器 Lynx,停止它,並將其傳送到後臺,如下所示
%lynx ^z %bg
使用 Ctrl+Z 停止的作業被傳遞到後臺並繼續執行。
您可以使用fg命令將作業調回前臺。單獨使用它將調回最近在後臺啟動的作業。如果我們剛剛將 lynx 傳送到後臺,如上所示,那麼
% fg
將把作業移到前臺。
可以使用以下兩個命令之一來查詢哪些作業正在後臺執行。
jobs命令在許多 shell 中可用,並報告正在執行的作業、作業編號、程序名稱(如果您希望使用-l選項檢視程序組 ID)。您可以像這樣使用它
%jobs
.
在輸出中,方括號('[' 和 ']')中的數字是作業編號,這些編號由fg和bg等程序控制命令使用。
ps命令將列印有關當前執行的程序的資訊。實際上,它比這要複雜一些。該命令列印有關當前終端和當前有效使用者 ID 控制的程序的資訊。某些命令需要用於控制程序的程序標識號,在這種情況下,該資訊將出現在輸出的第一列中。
%ps
現在您可以使用 jobs 或 ps 識別作業編號,可以使用它們來控制作業。如果您在後臺運行了多個作業,可以透過使用作業編號選擇一個作業並將其調回前臺。您可以透過新增作業編號來使用fg命令,而不是直接使用fg命令,例如
%fg 2
這將把編號為 2 的作業(由jobs標識)調回前臺。
您可以透過不同的方式終止 Unix 作業。一種簡單的方法是將作業調回前臺並終止它,例如使用 Ctrl+C。
Unix 命令kill可用於終止後臺程序。您可以使用作業編號(在前面加上 %)或程序標識號 (PID) 作為kill命令的引數。一個常見的誤解是需要使用 -9(SIGKILL 訊號)來終止程序。這是一個不好的做法,因為 SIGKILL 訊號不允許程序正常終止,而是會立即終止它。這會導致記憶體管理問題。正確終止程序的方式是使用 -2(SIGINT)訊號,它允許程序執行清理工作
%kill -2 %2
%2 指定了程序的 PID。要使用作業編號殺死作業,請省略百分號
%kill -2 1367
如果 -2 訊號不起作用,該程序可能被阻塞或執行不正常。在這種情況下,請使用 -1(SIGHUP)、-15(SIGTERM),最後再嘗試使用 -9(SIGKILL)。
