Linux後臺運行&、nohup

(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 &

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