1. 程式人生 > >linux後臺執行&符號、nohup命令、輸出重定向等使用方法

linux後臺執行&符號、nohup命令、輸出重定向等使用方法

列出若干種情形,便於這幾個命令及引數的理解:

在命令最後加上&符號,表示讓這個程序到後臺去執行,這樣立刻返回到提示符狀態,我們可以接著做下面的事。如:command &

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

現在清淨了。但有時我們會發現後臺執行的程序出錯了,我們希望把錯誤資訊也儲存起來。那就用到了linux中預設定義兩個變數:1指標準輸出;2指錯誤輸出,所以寫成這樣:command 1>output 2>error & ,正常的輸出在output檔案裡,錯誤的輸出在error檔案裡。這裡也等同於command >output 2>error &

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

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

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

基本上引數的各種寫法都在這裡了,但有個問題。這種“後臺”程序在shell一直開啟的情況下是沒有問題的,如果我們關了shell視窗甚至退出ssh登入或vnc登入,那麼程序自動就結束了。所以如果想退出視窗乃至退出登入仍然保持程式執行,再加上nohup,形如:nohup command 1>output 2>&1 &

大概就這些情況了。