Linux後臺運行&、nohup、jobs

後臺運行

(1)當在前臺運行某個作業時,終端被該作業佔據;可以在命令後面加上& 實現後臺運行 command &。

(2)但此時如果這個進程有輸出,還是會顯示出來,這又會干擾到我們的shell窗口。所以可以考慮把標準輸出重定向到某個文件去,如:command >output &

(3)但有時我們會發現後臺運行的進程出錯了,我們希望把錯誤信息也保存起來。那就用到了linux中默認定義兩個變量:1指標準輸出;2指錯誤輸出,所以寫成這樣:command 1>output 2>error & ,正常的輸出在output文件裏,錯誤的輸出在error文件裏。這裏也等同於command >output 2>error &

(4)有時候只想保留一種,另外一個既不輸出又不保存,那就用到這個設備**/dev/null**,所以忽略錯誤輸出:command 1>output 2>/dev/null & ;忽略標準輸出:command 1>/dev/null 2>error &;忽略全部輸出: command 1>/dev/null 2>/dev/null

(5)1,2兩種信息之間還可以進行重定向,所以這種:command 1>output 2>&1 & 表示錯誤輸出也重定向回標準輸出,即兩種信息都保存到output裏。那幹嘛不寫成command 1>output 2>output & 呢?答案是這樣不行,別看都輸出到/dev/null可以,但如果寫成相同的文件名會導致衝突,所以如果想同時保留只能是上面的寫法;同理:忽略全部輸出還可以寫成: command >/dev/null 2>&1 &

(6)這樣的文件輸出,每次運行會覆蓋現有的文件,如果我們希望追加而不是覆蓋,那麼就用>>符號,這樣命令就是: command 1>>log 2>>error &

(7)這種“後臺”進程在shell一直打開的情況下是沒有問題的,如果我們關了shell窗口甚至退出ssh登錄或vnc登錄,那麼進程自動就結束了。所以如果想退出窗口乃至退出登錄仍然保持程序運行,再加上nohup,形如:nohup command 1>>output 2>>&1 &

查看後臺運行任務
(1)jobs 查看後臺運行的任務 -L 選項可顯示所有任務的PID。
(2)fg 把後臺任務調至前臺繼續運行,多個任務可以用fg %num(命令編號)將選中的命令調出。
(3)bg 將在後臺暫停的命令,繼續執行。多個任務可以用bg %num將選中的命令調出。
(4)Ctrl+z 前臺運行的任務,進入後臺暫停狀態。
(5)kill PID 殺掉任務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章