App下載

Linux 如何將任務(wù)進(jìn)行前后臺(tái)切換操作?

著名奶茶鑒定家 2021-08-12 15:33:56 瀏覽數(shù) (3734)
反饋

Linux 是一個(gè)多任務(wù)的操作系統(tǒng), 在同一時(shí)間,系統(tǒng)可以運(yùn)行多個(gè)任務(wù)。

當(dāng)我們使用Node或者Flask運(yùn)行一個(gè)進(jìn)程時(shí), 該進(jìn)程會(huì)占用終端。

例如:

# 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)程在后臺(tái)運(yùn)行

我們可以在命令后加上 & 符號(hào),將進(jìn)程切換到后臺(tái)。

例如:

# nohup python cutword.py >/dev/null 2>&1 &
[1] 30979

?nohup? 的用途是不掛斷地運(yùn)行命令。

無(wú)論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當(dāng)前目錄的 nohup.out 文件中。

如果讓程序始終在后臺(tái)執(zhí)行,即使關(guān)閉當(dāng)前的終端也執(zhí)行(?&?做不到),這時(shí)候需要?nohup?。該命令可以在你退出帳戶/關(guān)閉終端之后繼續(xù)運(yùn)行相應(yīng)的進(jìn)程。

?>/dev/null 2>&1? 是將標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出都忽略。

?最后的&?將進(jìn)程在后臺(tái)運(yùn)行。

?[1] 30979? 分別表示后臺(tái)任務(wù)編號(hào)和進(jìn)程ID。

查看后臺(tái)任務(wù)

我們可以使用?jobs?命令查看在后臺(tái)運(yùn)行的進(jìn)程列表信息。

# jobs
[1]+  運(yùn)行中               nohup python cutword.py > /dev/null 2>&1 &

當(dāng)終端關(guān)閉后,在另一個(gè)終端jobs是無(wú)法看到后臺(tái)任務(wù)列表的,此時(shí)利用ps(進(jìn)程查看命令)

# ps -aux | grep "cutword.py"

將進(jìn)程切換到前臺(tái)

我們可以使用 ?fg %后臺(tái)編號(hào)? 將指定進(jìn)程切回前臺(tái)運(yùn)行。

# fg %1
nohup python cutword.py > /dev/null 2>&1

我們會(huì)發(fā)現(xiàn),這時(shí)程序會(huì)一直卡在終端。這時(shí),我們可以使用 ctrl+z 將它再次切到后臺(tái)運(yùn)行。

# fg %1
nohup python cutword.py > /dev/null 2>&1
^Z
[1]+  已停止               nohup python cutword.py > /dev/null 2>&1

但是,我們會(huì)發(fā)現(xiàn),進(jìn)程變成了 stopped 的狀態(tài),我們也可以在后臺(tái)進(jìn)程列表里看到它的狀態(tài)。

這也是 ctrl+z 命令的特點(diǎn):將進(jìn)程切換到后臺(tái),并停止運(yùn)行。

如果我們想讓它恢復(fù)運(yùn)行,我們就可以使用 bg 命令了。

# bg %1
[1]+ nohup python cutword.py > /dev/null 2>&1 &

終止后臺(tái)任務(wù)

如果我們想殺死某個(gè)后臺(tái)進(jìn)程,我們可以使用 kill 命令。

kill 命令的用法有兩種:

kill pid
kill %N

例如,我們想殺死后臺(tái)編號(hào)為1的進(jìn)程,可以這樣:

# kill %1
# jobs
[1]+  已終止               nohup python cutword.py > /dev/null 2>&1

總結(jié)

?命令 & ?:將任務(wù)進(jìn)程在后臺(tái)運(yùn)行。

?jobs?:查看后臺(tái)的進(jìn)程列表。

?fg %后臺(tái)任務(wù)編號(hào)?:將指定后臺(tái)任務(wù)切換到前臺(tái)運(yùn)行。

?bg %后臺(tái)任務(wù)編號(hào)?: 恢復(fù)運(yùn)行后臺(tái)指定的任務(wù)。

?kill %后臺(tái)任務(wù)編號(hào)?:殺死后臺(tái)指定任務(wù)。


0 人點(diǎn)贊