2021-05-12 14:32:11
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 &
大概就這些情況了。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-09/135066.htm
相關文章