linux後臺執行命令:&和nohup

當咱們在終端或控制檯工做時,可能不但願因爲運行一個做業而佔住了屏幕,由於可能還有更重要的事情要作,好比閱讀電子郵件。對於密集訪問磁盤的進程,咱們更但願它可以在天天的非負荷高峯時間段運行(例如凌晨)。爲了使這些進程可以在後臺運行,也就是說不在終端屏幕上運行,有幾種選擇方法可供使用。shell


  • 當在前臺運行某個做業時,終端被該做業佔據;能夠在命令後面加上& 實現後臺運行。例如:sh test.sh & 
    適合在後臺運行的命令有f i n d、費時的排序及一些s h e l l腳本。在後臺運行做業時要小心:須要用戶交互的命令不要放在後臺執行,由於這樣你的機器就會在那裏傻等。不過,做業在後臺運行同樣會將結果輸出到屏幕上,干擾你的工做。若是放在後臺運行的做業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:
command > out.file 2>&1 & 
  • 1

這樣,全部的標準輸出和錯誤輸出都將被重定向到一個叫作out.file 的文件中。spa

PS:當你成功地提交進程之後,就會顯示出一個進程號,能夠用它來監控該進程,或殺死它。(ps -ef | grep 進程號 或者 kill -9 進程號)

  • nohup 
    使用&命令後,做業被提交到後臺運行,當前控制檯沒有被佔用,可是一但把當前控制檯關掉(退出賬戶時),做業就會中止運行。nohup命令能夠在你退出賬戶以後繼續運行相應的進程。nohup就是不掛起的意思( no hang up)。該命令的通常形式爲:
nohup command &
  • 1

若是使用nohup命令提交做業,那麼在缺省狀況下該做業的全部輸出都被重定向到一個名爲nohup.out的文件中,除非另外指定了輸出文件:code

nohup command > myout.file 2>&1 &
  • 1

使用了nohup以後,不少人就這樣無論了,其實這樣有可能在當前帳戶非正常退出或者結束的時候,命令仍是本身結束了。因此在使用nohup命令後臺運行命令以後,須要使用exit正常退出當前帳戶,這樣才能保證命令一直在後臺運行。

  • ctrl + z 
    能夠將一個正在前臺執行的命令放到後臺,而且處於暫停狀態。server

  • Ctrl+c 
    終止前臺命令。排序

  • jobs 
    查看當前有多少在後臺運行的命令。 
    jobs -l選項可顯示全部任務的PID,jobs的狀態能夠是running, stopped, Terminated。可是若是任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。進程

  • 2>&1解析
command >out.file 2>&1 &
  • 1
  1. command>out.file是將command的輸出重定向到out.file文件,即輸出內容不打印到屏幕上,而是輸出到out.file文件中。
  2. 2>&1 是將標準出錯重定向到標準輸出,這裏的標準輸出已經重定向到了out.file文件,即將標準出錯也輸出到out.file文件中。最後一個&, 是讓該命令在後臺執行。
  3. 試想2>1表明什麼,2與>結合表明錯誤重定向,而1則表明錯誤重定向到一個文件1,而不表明標準輸出;換成2>&1,&與1結合就表明標準輸出了,就變成錯誤重定向到標準輸出.
相關文章
相關標籤/搜索