列出若干種情形,便於這幾個命令及參數的理解:
在命令最後加上&符號,表示讓這個進程到後台去執行,這樣立刻返回到提示符狀態,我們可以接著做下面的事。如: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 &
大概就這些情況了。