Linux的後台執行 和nohup

2021-08-28 12:39:35 字數 1657 閱讀 8672

我們在使用linux伺服器的時候,一般是使用終端利用ssh協議登入的。當你需要同時進行一些作業,但又不想開啟多個終端的話就需要用到後台執行。

sh test.sh &
一些費時的作業可以這樣放在後台執行,但需要注意的是後台執行的作業如果有輸出,一樣會輸出到終端螢幕。有大量輸出的情況下,最好將輸出重定向至指定檔案,比如這樣:

sh test.sh > file.log 2>

&1 &

linux核心(kernel)利用檔案描述符(file descriptor)來訪問檔案。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。常見的檔案描述符是stdin、stdout和stderr。

系統預留檔案描述符

重定向將輸入文字通過擷取模式儲存到檔案。>表示的是覆蓋寫,如果需要追加寫則用>>

所以回到上面那個列子:

sh test.sh > file.log 2>

&1 &

> file.log指的是標準輸出重定向至file.log檔案,因為預設就是標準輸出,所以這裡的1 > file.log中的1可以省略。

2>&1指的是標準錯誤重定向至標準輸出的位置,即file.log,因為標準輸出已經被重定向至file.log裡了。

還有一種特殊的重定向方法:

sh test.sh > /dev/null
/dev/null是乙個特殊的裝置檔案,這個檔案接受到任何資料都會被丟系,通常被稱為位桶、黑洞。任何被重定向至這裡的內容都會被丟棄。

不管是前台還是後台執行的作業,如果我們關閉終端視窗或者退出登入ssh甚至網路波動斷開連線,作業就會被終止。這是因為系統訊號sighup的緣故。

登入linux時,系統會分配給登入使用者乙個終端(session)。

在這個終端執行的所有程式,包括前台程序組和後台程序組,一般都屬於這個session。

當使用者退出linux登入時,前台程序組和後台有對終端輸出的程序將會收到sighup訊號。

這個訊號的預設操作為終止程序,因此前台程序組和後台有終端輸出的程序就會中止。

系統訊號還有很多,這裡不展開。

所以nohup命令就登場了,它可以將程式以忽略掛起訊號的方式執行起來,被執行的程式的輸出資訊將不會顯示到終端。

nohup sh test.sh
這時輸出不會顯示在終端螢幕,而是自動追加到當前目錄的nohup.out檔案,當然你也可以重定向至你想要的地方,這樣就不會自動生成nohup.out

結合之前的&後台命令,一般完整的用法就是這樣:

nohup sh test.sh > file.log 2>

&1 &

這時你就可以放心的退出ssh登入,讓作業自動在伺服器後台執行,之後回來查詢日誌檔案就可以啦。

Linux後台執行

解除螢幕占用,並且保持命令執行。類似於windows最小化。top 檢視cpu資訊。定位將前面內容定位到後面檔案當中 echo echo aaa 1.txt 把aaa寫到 覆蓋 aaa中 echo 1.txt 可以用來清空檔案 在命令的尾部新增 進行後台執行,命令有返回還是會返回到控制台,先將返回的...

linux後台執行命令 和nohup

當我們在終端或控制台工作時,可能不希望由於執行乙個作業而佔住了螢幕,因為可能還有更重要的事情要做,比如閱讀電子郵件。對於密集訪問磁碟的程序,我們更希望它能夠在每天的非負荷高峰時間段執行 例如凌晨 為了使這些程序能夠在後台執行,也就是說不在終端螢幕上執行,有幾種選擇方法可供使用。nohup start...

linux後台執行命令 和nohup

command out.file 2 1 nohup command nohup command myout.file 2 1 ctrl c 終止前台命令。jobs 檢視當前有多少在後台執行的命令。jobs l選項可顯示所有任務的pid,jobs的狀態可以是running,stopped,termi...