關於linux 先後臺的相關命令。(總結別人)

首先是 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

Linux運行與控制後臺進程的方法:nohup, setsid, &, disown, screen

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便可關閉該會話。
相關文章
相關標籤/搜索