Linux 是一個多任務(wù)的操作系統(tǒng), 在同一時間,系統(tǒng)可以運(yùn)行多個任務(wù)。
當(dāng)我們使用Node或者Flask運(yùn)行一個進(jìn)程時, 該進(jìn)程會占用終端。
例如:
# python cutword.py
* Serving Flask app 'cutword' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://10.150.39.18:7776/ (Press CTRL+C to quit)
將進(jìn)程在后臺運(yùn)行
我們可以在命令后加上 & 符號,將進(jìn)程切換到后臺。
例如:
# nohup python cutword.py >/dev/null 2>&1 &
[1] 30979
?nohup
? 的用途是不掛斷地運(yùn)行命令。
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當(dāng)前目錄的 nohup.out 文件中。
如果讓程序始終在后臺執(zhí)行,即使關(guān)閉當(dāng)前的終端也執(zhí)行(?&
?做不到),這時候需要?nohup
?。該命令可以在你退出帳戶/關(guān)閉終端之后繼續(xù)運(yùn)行相應(yīng)的進(jìn)程。
?>/dev/null 2>&1
? 是將標(biāo)準(zhǔn)輸出和錯誤輸出都忽略。
?最后的&
?將進(jìn)程在后臺運(yùn)行。
?[1] 30979
? 分別表示后臺任務(wù)編號和進(jìn)程ID。
查看后臺任務(wù)
我們可以使用?jobs
?命令查看在后臺運(yùn)行的進(jìn)程列表信息。
# jobs
[1]+ 運(yùn)行中 nohup python cutword.py > /dev/null 2>&1 &
當(dāng)終端關(guān)閉后,在另一個終端jobs是無法看到后臺任務(wù)列表的,此時利用ps(進(jìn)程查看命令)
# ps -aux | grep "cutword.py"
將進(jìn)程切換到前臺
我們可以使用 ?fg %后臺編號
? 將指定進(jìn)程切回前臺運(yùn)行。
# fg %1
nohup python cutword.py > /dev/null 2>&1
我們會發(fā)現(xiàn),這時程序會一直卡在終端。這時,我們可以使用 ctrl+z
將它再次切到后臺運(yùn)行。
# fg %1
nohup python cutword.py > /dev/null 2>&1
^Z
[1]+ 已停止 nohup python cutword.py > /dev/null 2>&1
但是,我們會發(fā)現(xiàn),進(jìn)程變成了 stopped 的狀態(tài),我們也可以在后臺進(jìn)程列表里看到它的狀態(tài)。
這也是 ctrl+z
命令的特點:將進(jìn)程切換到后臺,并停止運(yùn)行。
如果我們想讓它恢復(fù)運(yùn)行,我們就可以使用 bg
命令了。
# bg %1
[1]+ nohup python cutword.py > /dev/null 2>&1 &
終止后臺任務(wù)
如果我們想殺死某個后臺進(jìn)程,我們可以使用 kill
命令。
kill 命令的用法有兩種:
kill pid
kill %N
例如,我們想殺死后臺編號為1的進(jìn)程,可以這樣:
# kill %1
# jobs
[1]+ 已終止 nohup python cutword.py > /dev/null 2>&1
總結(jié)
?命令 &
?:將任務(wù)進(jìn)程在后臺運(yùn)行。
?jobs
?:查看后臺的進(jìn)程列表。
?fg %后臺任務(wù)編號
?:將指定后臺任務(wù)切換到前臺運(yùn)行。
?bg %后臺任務(wù)編號
?: 恢復(fù)運(yùn)行后臺指定的任務(wù)。
?kill %后臺任務(wù)編號
?:殺死后臺指定任務(wù)。