1 概述
linux的作業(yè)有兩個方式,一個是工作于前臺硼婿,一個是工作于后臺
前臺作業(yè):通過終端啟動锌半,且啟動后一直占據終端;
后臺作業(yè):可通過終端啟動寇漫,但啟動后即轉入后臺運行(釋放終端)
2 讓作業(yè)運行于后臺
(1) 運行中的作業(yè):Ctrl+z脖祈,程序被放到后臺忆嗜,但是不執(zhí)行浊仆,狀態(tài)是stop
(2) 尚未啟動的作業(yè):COMMAND & 直接將程序放到后臺運行
以上兩個方式 后臺作業(yè)雖然被送往后臺運行酣溃,但其依然與終端相關;退出終端栓撞,將關閉后臺作業(yè)亚亲。
如果希望送往后臺后,剝離與終端的關系,要使用以下兩個方式運行語句
方法一
nohup COMMAND &>/dev/null ?&
方法二
先執(zhí)行screen
screen;
然后在screen的窗口下執(zhí)行命令捌归。不要在這個screen窗口中執(zhí)行終止命令的操作
COMMAND;
關閉該screen窗口或者直接退出終端肛响,后臺這個命令還是會執(zhí)行。
建議用screen的下運行命令惜索,不需要看到命令的輸出特笋,且還需要在該screen窗口下操作
建議輸入命令 COMMAND &>/dev/null & ? 這樣命令直接在后臺運行,不干擾當前screen操作
這種方式也可以同時在該screen下輸入多個后臺運行的命令
用screen執(zhí)行命令巾兆,會使得命令在后臺執(zhí)行猎物,即使斷網了,后臺還是能執(zhí)行命令角塑,當終端斷網是蔫磨,screen的進程會獨立出來,所以命令會繼續(xù)運行
注意
在6上后臺執(zhí)行的命令&圃伶,終端網絡斷開堤如,命令還是會繼續(xù)執(zhí)行
在7上后臺執(zhí)行的命令&,終端網絡斷開窒朋,命令不會繼續(xù)執(zhí)行搀罢,建議用screen或者用調用nohup的方式執(zhí)行
3 作業(yè)控制
3.1 查看作業(yè)
查看當前終端所有作業(yè),執(zhí)行命令 jobs
如果已經關閉終端侥猩,但是要查看命令的PID榔至,可以用以下命令進程查看
ps -ef | grep CMD
3.2 作業(yè)控制
3.2.1 fg
fg[[%]JOB_NUM]:把指定的后臺作業(yè)調回前臺
先用job查看后臺是否有進程,假設后臺有一個進程id 2,不管是running 還是stop只要用
fg 2,就會調到前臺來運行欺劳,但是唧取,到前臺運行后,按ctrl+c 就會停止進程
3.2.2 bg
bg[[%]JOB_NUM]:讓送往后臺的作業(yè)在后臺繼續(xù)運行
假設終端前臺本來有一個指令在運行划提,此時被按下ctrl+z枫弟,則該指令會被放到后臺,但是此時狀態(tài)是stopped
通過命令bg 1會再次將指令放到后臺運行腔剂,此時ctrl-c已經不能停止命令,如果是普通窗口下運行命令驼仪,
則關閉終端就會使得該后臺命令停止運行
但是掸犬,如果是在screen下運行bg,則必須通過kill 殺掉對應進程的id來停止命令
3.2.3 kill
kill [%JOB_NUM]:終止指定的作業(yè)
kill 信號 PID
如 kill -9 1028 殺掉進程號為1028的進程