1. 程式人生 > >linux 中&和nohup的作用

linux 中&和nohup的作用

在linux終端或控制檯上執行命令時,可能不希望指令碼佔住螢幕需要在後臺執行指令碼,有幾種方法讓指令碼在後臺執行:

1.&

當在前臺執行某個作業時,終端被該作業佔據;可以在命令後面加上& 實現後臺執行。例如:sh test.sh & 

需要使用者互動的命令不要放在後臺執行,不過,作業在後臺執行一樣會將結果輸出到螢幕上,如果放在後臺執行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個檔案中:

command  >  out.file  2>&1  &

這樣,所有的標準輸出和錯誤輸出都將被重定向到一個叫做out.file 的檔案中。

成功地提交程序以後,會顯示出一個程序號,可以用它來監控或殺死該程序。(ps -ef | grep 程序號 或者 kill -9 程序號)

2.nohup

使用&命令後,作業被提交到後臺執行,當前控制檯沒有被佔用,但是一但把當前控制檯關掉(退出帳戶時),作業就會停止執行。nohup命令可以在你退出帳戶之後繼續執行相應的程序。nohup就是不掛起的意思( no hang up)。該命令的一般形式為:

nohup command &

使用nohup命令提交作業,那麼在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的檔案中,除非另外指定了輸出檔案:

nohup command > myout.file 2>&1 &

使用nohup之後有可能在當前賬戶非正常退出或結束的時候,命令還是會自己結束。所以在使用nohup命令後臺執行後,需要使用exit正常退出當前賬戶,這樣才能保證命令一直在後臺執行。

 2>&1解析:

command >out.file 2>&1 &
  • command>out.file是將command的輸出重定向到out.file檔案,即輸出內容不列印到螢幕上,而是輸出到out.file檔案中。
  • 2>&1 是將標準出錯重定向到標準輸出,這裡的標準輸出已經重定向到了out.file檔案,即將標準出錯也輸出到out.file檔案中。最後一個&, 是讓該命令在後臺執行。
  • 0 ,1,2分別代表stdin標準輸入,stdout標準輸出,stderr標準錯誤 ,2與>結合代表錯誤重定向,而1則代表錯誤重定向到一個檔案1,而不代表標準輸出;換成2>&1,&與1結合就代表標準輸出了,就變成錯誤重定向到標準輸出.