1. 程式人生 > >詳解linux後臺運行和關閉、查看後臺任務

詳解linux後臺運行和關閉、查看後臺任務

輸入 列表 顯示 color pre opp ima 監聽 kill -9

一、&

加在一個命令的最後,可以把這個命令放到後臺執行,如

watch -n 10 sh test.sh & #每10s在後臺執行一次test.sh腳本

二、ctrl + z(將任務放置後臺運行並處於暫停狀態)

可以將一個正在前臺執行的命令放到後臺,並且處於暫停狀態。

三、jobs(查看當前有多少在後臺運行的命令)

jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated(終止)。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。也就是說,jobs命令顯示的是當前shell環境中所起的後臺正在運行或者被掛起的任務信息。

四、fg(後臺任務調至前臺運行)

將後臺中的命令調至前臺繼續運行。如果後臺中有多個命令,可以用fg %jobnumber(jobs -l查看命令編號,不是進程號)將選中的命令調出。

技術分享

五、bg(後臺暫停的任務在後臺繼續運行)

將一個在後臺暫停的命令,變成在後臺繼續執行。如果後臺中有多個命令,可以用bg %jobnumber將選中的命令調出。

將一個將任務轉移到後臺運行:先ctrl + z;再bg %jobnumber,這樣進程就被移到後臺運行,終端還能繼續接受命令。

概念:當前任務

如果後臺的任務號有2個,[1],[2];如果當第一個後臺任務順利執行完畢,第二個後臺任務還在執行中時,當前任務便會自動變成後臺任務號碼“[2]” 的後臺任務。所以可以得出一點,即當前任務是會變動的。當用戶輸入“fg”、“bg”和“stop”等命令時,如果不加任何引號,則所變動的均是當前任務

六、kill

  • 法子1:通過jobs命令查看job號(假設為num),然後執行kill %num
  • 法子2:通過ps命令查看job的進程號(PID,假設為pid),然後執行kill pid(有局限性,例如後臺進程,守護進程等)

前臺進程的終止:Ctrl+c

kill的其他作用

kill除了可以終止進程,還能給進程發送其它信號,使用kill -l 可以察看kill支持的信號。

SIGTERM是不帶參數時kill發送的信號,意思是要進程終止運行,但執行與否還得看進程是否支持。如果進程還沒有終止,可以使用kill -SIGKILL pid(kill -9 pid),這是由內核來終止進程,進程不能監聽這個信號。

七、nohup

如果讓程序始終在後臺執行,即使關閉當前的終端也執行(之前的&做不到),這時候需要nohup。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。關閉終端後,在另一個終端jobs已經無法看到後臺跑得程序了,此時利用ps(進程查看命令)。

ps -aux | grep "test.sh" #a:顯示所有程序 u:以用戶為主的格式來顯示 x:顯示所有程序,不以終端機來區分

詳解linux後臺運行和關閉、查看後臺任務