Linux命令-nohup和&


基礎

在linux終端或控制台上執行命令時,可能不希望腳本占住屏幕需要在后台執行腳本,有幾種方法讓腳本在后台執行:

  • &

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

    需要用戶交互的命令不要放在后台執行,不過,作業在后台運行一樣會將結果輸出到屏幕上,如果放在后台運行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:

    command  >  out.file  2>&1  &
    

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

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

  • 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結合就代表標准輸出了,就變成錯誤重定向到標准輸出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM