命令運(yùn)行時(shí)使用CTRL+Z,強(qiáng)制當(dāng)前進(jìn)程轉(zhuǎn)為后臺(tái),并使之掛起(暫停).
成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)與策劃設(shè)計(jì),平泉網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:平泉等地區(qū)。平泉做網(wǎng)站價(jià)格咨詢:18982081108
1. 使進(jìn)程恢復(fù)運(yùn)行(后臺(tái))
(1)使用命令bg
Example:
zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv01
*這里使用CTRL+Z,此時(shí)serv01是停止?fàn)顟B(tài)*
[1]+ Stopped ./tcpserv01
zuii@zuii-desktop:~/unp/tcpcliserv$ bg
[1]+ ./tcpserv01 *此時(shí)serv01運(yùn)行在后臺(tái)*
zuii@zuii-desktop:~/unp/tcpcliserv$
(2)如果用CTRL+Z停止了幾個(gè)程序呢?
Example:
zuii@zuii-desktop:~/unp/tcpcliserv$ jobs
[1]- Running ./tcpserv01
[2]+ Stopped ./tcpcli01 127.0.0.1
zuii@zuii-desktop:~/unp/tcpcliserv$ bg %1
bash: bg:任務(wù) 1 已轉(zhuǎn)入后臺(tái) *后臺(tái)運(yùn)行*
2. 使進(jìn)程恢復(fù)至前臺(tái)運(yùn)行
Example:
zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv04
[1]+ Stopped ./tcpserv04
zuii@zuii-desktop:~/unp/tcpcliserv$ fg
./tcpserv04
總結(jié):
(1) CTRL+Z掛起進(jìn)程并放入后臺(tái)
(2) jobs 顯示當(dāng)前暫停的進(jìn)程
(3) bg %N 使第N個(gè)任務(wù)在后臺(tái)運(yùn)行(%前有空格)
(4) fg %N 使第N個(gè)任務(wù)在前臺(tái)運(yùn)行
默認(rèn)bg,fg不帶%N時(shí)表示對(duì)最后一個(gè)進(jìn)程操作!
kill -9 PID —— 強(qiáng)制殺死一個(gè)進(jìn)程。
1、kill -9 殺死后臺(tái)運(yùn)行的進(jìn)程。
紅色下劃線:sleep 10000 —— 后臺(tái)運(yùn)行延時(shí) 10000 秒的命令,進(jìn)程 ID 為1317。
黃色下劃線:ps —— 列出 1317 sleep 命令的進(jìn)程。
(PID:進(jìn)程 ID、PGID:線程組 ID、SID:會(huì)話 ID、TTY:進(jìn)程運(yùn)行的終端,標(biāo)識(shí)那個(gè)終端控制。(pts遠(yuǎn)程終端、tty系統(tǒng)終端)、TIME:進(jìn)程運(yùn)行的時(shí)間 和 CMD:命令的名稱和參數(shù))。
jobs -l —— 列出后臺(tái)運(yùn)行的命令,1317 sleep 命令正在后臺(tái)運(yùn)行。
藍(lán)色下劃線:kill -9 1317—— 殺死?1317 進(jìn)程。
綠色方框:ps 查詢進(jìn)程,1317 sleep進(jìn)程已經(jīng)被殺死(Killed)。jobs -l 已經(jīng)沒(méi)有后臺(tái)運(yùn)行的1317 sleep 命令。
2、kill -9 終止掛起的進(jìn)程。
紅色下劃線:執(zhí)行 sleep 10000 后 ctrl + z 掛起。
黃色下劃線:ps -j 查看進(jìn)程,有 1342 sleep 的進(jìn)程。jobs -l 查看后臺(tái),1342 sleep 的狀態(tài)是 stopped 暫停狀態(tài)。
藍(lán)色下劃線:kill -9 殺死 1342 進(jìn)程。此時(shí)系統(tǒng)沒(méi)有反饋信息。
綠色下劃線:ps -j 查看進(jìn)程,1342 sleep 已經(jīng)被殺死(Killed)。jobs -l 查看后臺(tái),已經(jīng)沒(méi)有了? 1342?sleep。
從實(shí)驗(yàn)上看:
1、后臺(tái)命令運(yùn)行時(shí)(Running),執(zhí)行 kill -9 可以強(qiáng)殺進(jìn)程。
2、掛起命令,處于暫停狀態(tài)時(shí)(Stopped),執(zhí)行 kill -9 后通過(guò) ps 查詢進(jìn)程, 可以看到進(jìn)程已經(jīng)被殺死。jobs 也查不到有后臺(tái)命令。(這里和 kill -2、kill -15 不一樣。kill -2、kill -15 在掛起命令,處于暫停狀態(tài)時(shí)(Stopped)時(shí)執(zhí)行,通過(guò) ps 還可以查詢到進(jìn)程,jobs 也可以查詢到后臺(tái)仍有處于暫停狀態(tài)的命令。)
命令運(yùn)行時(shí)使用CTRL+Z,強(qiáng)制當(dāng)前進(jìn)程轉(zhuǎn)為后臺(tái),并使之掛起(暫停).\x0d\x0a1. 使進(jìn)程恢復(fù)運(yùn)行(后臺(tái))\x0d\x0a(1)使用命令bg\x0d\x0aExample:\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv01\x0d\x0a*這里使用CTRL+Z,此時(shí)serv01是停止?fàn)顟B(tài)*\x0d\x0a[1]+ Stopped ./tcpserv01\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ bg\x0d\x0a[1]+ ./tcpserv01 *此時(shí)serv01運(yùn)行在后臺(tái)*\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$\x0d\x0a(2)如果用CTRL+Z停止了幾個(gè)程序呢?\x0d\x0aExample:\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ jobs\x0d\x0a[1]- Running ./tcpserv01 \x0d\x0a[2]+ Stopped ./tcpcli01 127.0.0.1\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ bg %1\x0d\x0abash: bg:任務(wù) 1 已轉(zhuǎn)入后臺(tái) *后臺(tái)運(yùn)行*\x0d\x0a2. 使進(jìn)程恢復(fù)至前臺(tái)運(yùn)行\(zhòng)x0d\x0aExample:\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv04\x0d\x0a[1]+ Stopped ./tcpserv04\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ fg\x0d\x0a./tcpserv04\x0d\x0a總結(jié):\x0d\x0a(1) CTRL+Z掛起進(jìn)程并放入后臺(tái)\x0d\x0a(2) jobs 顯示當(dāng)前暫停的進(jìn)程\x0d\x0a(3) bg %N 使第N個(gè)任務(wù)在后臺(tái)運(yùn)行(%前有空格)\x0d\x0a(4) fg %N 使第N個(gè)任務(wù)在前臺(tái)運(yùn)行\(zhòng)x0d\x0a默認(rèn)bg,fg不帶%N時(shí)表示對(duì)最后一個(gè)進(jìn)程操作!
背景 :工作需要,需要遠(yuǎn)程控制主機(jī)使其斷開(kāi)Xshell后也能一直運(yùn)行。
關(guān)鍵字 : ,nohup,腳本掛起。
在應(yīng)用Unix/Linux時(shí),我們一般想讓某個(gè)程序在后臺(tái)運(yùn)行,于是我們將常會(huì)用 在程序結(jié)尾來(lái)讓程序自動(dòng)運(yùn)行。
鍵入Ctrl + C,發(fā)出SIGINT信號(hào),程序會(huì)繼續(xù)運(yùn)行
方法一、輸入命令:jobs
方法二:輸入命令:ps
fg、bg、jobs、、nohup、ctrl+z、ctrl+c 命令
加在一個(gè)命令的最后,可以把這個(gè)命令放到后臺(tái)執(zhí)行,如
可以將一個(gè)正在前臺(tái)執(zhí)行的命令放到后臺(tái),并且處于暫停狀態(tài)。
查看當(dāng)前有多少在后臺(tái)運(yùn)行的命令
jobs -l選項(xiàng)可顯示所有任務(wù)的PID,jobs的狀態(tài)可以是running, stopped, Terminated。但是如果任務(wù)被終止了(kill),shell 從當(dāng)前的shell環(huán)境已知的列表中刪除任務(wù)的進(jìn)程標(biāo)識(shí)。
將后臺(tái)中的命令調(diào)至前臺(tái)繼續(xù)運(yùn)行。如果后臺(tái)中有多個(gè)命令,可以用fg %jobnumber(是命令編號(hào),不是進(jìn)程號(hào))將選中的命令調(diào)出。
將一個(gè)在后臺(tái)暫停的命令,變成在后臺(tái)繼續(xù)執(zhí)行。如果后臺(tái)中有多個(gè)命令,可以用bg %jobnumber將選中的命令調(diào)出。
法子1:通過(guò)jobs命令查看job號(hào)(假設(shè)為num),然后執(zhí)行kill %num
法子2:通過(guò)ps命令查看job的進(jìn)程號(hào)(PID,假設(shè)為pid),然后執(zhí)行kill pid
前臺(tái)進(jìn)程的終止:Ctrl+c
如果讓程序始終在后臺(tái)執(zhí)行,即使關(guān)閉當(dāng)前的終端也執(zhí)行(之前的做不到),這時(shí)候需要nohup。該命令可以在你退出帳戶/關(guān)閉終端之后繼續(xù)運(yùn)行相應(yīng)的進(jìn)程。
關(guān)閉中斷后,在另一個(gè)終端jobs已經(jīng)無(wú)法看到后臺(tái)跑得程序了,此時(shí)利用ps(進(jìn)程查看命令)
如上所示:
nohup 和 組合了后臺(tái)運(yùn)行程序。
可以輸出到 out.log保存程序輸出,也可以輸出到/dev/null 即空設(shè)備,不保存輸出。
上面三種方式無(wú)論在nohup.out 或test.out都看不到數(shù)據(jù)結(jié)果,這是因?yàn)閜ython執(zhí)行有緩存輸出
解決
新的接口接入查看程序
使用后臺(tái)運(yùn)行程序:
結(jié)果會(huì)輸出到終端
使用Ctrl + C發(fā)送SIGINT信號(hào), 程序免疫
關(guān)閉session發(fā)送SIGHUP信號(hào), 程序關(guān)閉
使用nohup運(yùn)行程序:
結(jié)果默認(rèn)會(huì)輸出到nohup.out
使用Ctrl + C發(fā)送SIGINT信號(hào), 程序關(guān)閉
關(guān)閉session發(fā)送SIGHUP信號(hào), 程序免疫
平日線上經(jīng)常使用nohup和配合來(lái)啟動(dòng)程序:
同時(shí)免疫SIGINT和SIGHUP信號(hào)
同時(shí),還有一個(gè)最佳實(shí)踐:
不要將信息輸出到終端標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯(cuò)誤輸出,而要用日志組件將信息記錄到日志里
nohup和究竟有啥區(qū)別