工作管理概述
工作管理指的是在單個登錄終端中(也就是登錄的shell界面中) 同時管理多個工作的行為楣嘁。windows將工作放入后臺是最小化即可,linux則需要使用相關(guān)命令操作殖妇。
通過工作管理我們可以將一些需要持續(xù)運行的命令或者說服務(wù)以及一些可能阻塞當(dāng)前終端操作的命令放在后臺運行或者暫停,然后也可以對后臺運行的工作進(jìn)行查看器紧,對暫停的工作進(jìn)行恢復(fù)韧拒。
注意事項
- 當(dāng)前的登錄終端,只能管理當(dāng)前終端的工作贞谓,而不能管理其他登錄終端的工作限佩。當(dāng)然有些服務(wù)除外,比如mysql服務(wù)自己做了優(yōu)化可以脫離終端裸弦,即使關(guān)閉當(dāng)前終端祟同,也不會停止服務(wù)
- 放入后臺的命令必須可以持續(xù)運行一段時間,這樣我們才能撲捉和操作這個工作
- 放入后臺執(zhí)行的命令不能和前臺用戶有交互或需要前臺輸入理疙,否則放入后臺只能暫停晕城,而不能執(zhí)行
相關(guān)說明
- 比如像
ls
、cat
命令這種瞬時運行的命令是不允許放入后臺的命令 - 一般諸如打包窖贤,復(fù)制大文件砖顷,壓縮與解壓縮,搜索命令
find
都可以放入后臺執(zhí)行 - 像
top
命令是為了展示結(jié)果給前端用戶的赃梧,而vim
命令是需要前臺輸入的滤蝠,諸如這些命令運行在后臺
是沒有任何意義的。即使通過命令將它們運行在后臺授嘀,也是stop狀態(tài)物咳。
工作管理方法
把進(jìn)程放入后臺
通過 &
符號 或者 ctrl + z
,以tar命令為例:
tar -zcf redis1.tar.gz &
#把命令放入后臺粤攒,并在后臺執(zhí)行
tar -zcf redis2.tar.gz
#按下ctr+z快捷鍵,放在后臺暫停
查看后臺的工作
jobs [-l]
# -l代表顯示工作的PID
"+"
號代表最后一個放入后臺的工作所森,也是工作恢復(fù)時,默認(rèn)恢復(fù)的工作
"-"
號代表倒數(shù)第二個放入后臺的工作夯接,第三個工作就不會有符號顯示
[1]
這里的1代表工作號
將后臺暫停的工作恢復(fù)到前臺執(zhí)行
fg %工作號
注: %號可以省略焕济,但是注意工作號和PID的區(qū)別,不帶參數(shù)默認(rèn)恢復(fù)"+"號的工作
將后臺暫停的工作恢復(fù)到前臺執(zhí)行
bg %工作號
后臺恢復(fù)執(zhí)行的命令盔几,是不能和前臺有交互的晴弃,否則不能恢復(fù)到后臺執(zhí)行,不帶參數(shù)默認(rèn)恢復(fù)"+"號的工作
后臺命令脫離終端運行
把命令放入后臺逊拍,只能在當(dāng)前登錄終端執(zhí)行上鞠。一旦退出或關(guān)閉終端,后臺程序就會停止芯丧。原因是一旦關(guān)閉終端芍阎,系統(tǒng)會默認(rèn)發(fā)出一個SIGHUP信號,把正在運行的后臺程序給終止掉缨恒。其實可以通過將程序做成守護(hù)進(jìn)程來避免終端的影響谴咸,但是操作和管理過于復(fù)雜
脫離終端常用方法
- 把需要后臺執(zhí)行的命令加入
/etc/rc.local
文件(推薦) - 使用系統(tǒng)定時任務(wù)轮听,讓系統(tǒng)在指定的時間執(zhí)行某個后臺命令
- 標(biāo)準(zhǔn)方法是使用nohup命令(推薦):
nohup [命令] &
舉個例子
vim for.sh
# 文件內(nèi)容如下
#!/bin/bash
for((i=0;i<=1000;i=i+1)){
do
echo 11 >> /root/for.log
sleep 10s
done
}
# 保存退出
nohup /root/for.sh &
# 關(guān)閉當(dāng)前終端,重新打開一個終端岭佳,查看該進(jìn)程依然存在:ps -aux