首先是 fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令shell
1、&code
加在一個命令的最後,能夠把這個命令放到後臺執行,如 watch -n 10 sh test.sh & #每10s在後臺執行一次test.sh腳本
2、ctrl + z進程
能夠將一個正在前臺執行的命令放到後臺,而且處於暫停狀態。
3、jobsit
查看當前有多少在後臺運行的命令 jobs -l選項可顯示全部任務的PID,jobs的狀態能夠是running, stopped, Terminated。可是若是任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。
4、fgtest
將後臺中的命令調至前臺繼續運行。若是後臺中有多個命令,能夠用fg %jobnumber(是命令編號,不是進程號)將選中的命令調出。
5、bg後臺
將一個在後臺暫停的命令,變成在後臺繼續執行。若是後臺中有多個命令,能夠用bg %jobnumber將選中的命令調出。
6、killfile
法子1:經過jobs命令查看job號(假設爲num),而後執行kill %num 法子2:經過ps命令查看job的進程號(PID,假設爲pid),而後執行kill pid 前臺進程的終止:Ctrl+c
7、nohup終端
若是讓程序始終在後臺執行,即便關閉當前的終端也執行(以前的&作不到),這時候須要nohup。該命令能夠在你退出賬戶/關閉終端以後繼續運行相應的進程。關閉中斷後,在另外一個終端jobs已經沒法看到後臺跑得程序了,此時利用ps(進程查看命令) ps -aux | grep "test.sh" #a:顯示全部程序 u:以用戶爲主的格式來顯示 x:顯示全部程序,不以終端機來區分
以上了解完,對於將程序運行在後臺還有幾種方案。grep
1.nohup程序
顧名思義,nohup的用途就是讓提交的命令忽略全部的hangup信號。 使用方法:nohup COMMAND [ARG]...
2.setsid
在一個新的會話中運行命令,從而能夠避開當前終端發出的HUP信號。 使用方法:setsid COMMAND [ARG]...
3.&
能夠結合()產生一個新的子shell並在這個子shell中將任務放置到後臺運行,從而不受當前shell終端的HUP信號影響。 使用方法:(COMMAND [ARG]... &) 而我一般的使用方式爲: nohup ./filename.sh > filename.log 2>&1 & 三點理由: 1)nohup保障進程不會被hangup信號異常中斷; 2)將任務放置到後臺運行,不佔用當前的終端; 3)將錯誤輸出也打印到log中,默認>只有標準輸出,錯誤輸出沒有。
4.控制進程
經過如下命令,咱們能夠對放入到後臺的命令進行控制 查看當前終端下的後臺進程: 直接執行:jobs 將查看到的某個後臺進程放回到前臺: 直接輸入:fg {jobid} //這裏的{jobid}是經過jobs命令中看到的進程前[]中的數字。 將當前正在前臺運行的進程放到後臺運行: 先敲下快捷鍵:ctrl +z //暫停當前正在運行的進程。 再執行:bg 終止當前正在前臺運行的進程: 直接敲下快捷鍵:ctrl +c
5.disown
亡羊補牢,爲沒有使用nohup與setsid的進程加上忽略HUP信號的功能。 使用方法: 將當前正在前臺運行的進程放到後臺運行(ctrl+z和bg); 而後執行disown -h %{jobid} //這裏的{jobid}是經過jobs命令中看到的進程前[]中的數字。
6.經過screen來實現穩定的後臺運行
screen是創建一個新的全屏虛擬會話終端,這個會話只有在手動輸入exit的時候纔會退出,在這個會話裏執行的命令不用擔憂HUP信號會對咱們的進程 形成影響,所以也不用給每一個命令前都加上「nohup」或「setsid」了,很是適合咱們有規劃的執行大量的後臺任務,能夠很是方便的讓咱們對這些後臺任 務進行管理。 使用方法: screen //當即建立並進入一個會話。 screen -dmS {name} //創建一個處於斷開模式下的會話,並根據咱們的須要指定其會話名稱。 screen -list //列出全部會話。 screen -r {name} //進入指定會話。 ctrl +ad //輸入快捷鍵ctrl +a和d,可暫時退出當前會話。 exit //進入指定會話後執行exit便可關閉該會話。