Linux進(jìn)程與作業(yè)的區(qū)別及相關(guān)命令
進(jìn)程是什么?作業(yè)又是什么?在Linux系統(tǒng)上運(yùn)行的所有東西都可以稱之為一個(gè)進(jìn)程。例如,一個(gè)簡(jiǎn)單的helloworld程序,在終端上輸入ls命令等等。
一個(gè)正常運(yùn)行的進(jìn)程稱之為作業(yè),一個(gè)作業(yè)可以啟動(dòng)多個(gè)進(jìn)程,例如作業(yè) ls -lrt | grep *.txt 就啟動(dòng)了兩個(gè)進(jìn)程。
進(jìn)程和作業(yè)相關(guān)的命令主要有:kill、disown、wait、fg、bg、jobs
fg、bg、jobs只接受作業(yè)號(hào)為參數(shù)。
kill、disown、wait即可接受作業(yè)號(hào)為參數(shù),又可接受進(jìn)程號(hào)為參數(shù)。
jobs 命令顯示了當(dāng)前 shell 環(huán)境中已啟動(dòng)的作業(yè)狀態(tài)。
- [alex@cgdp alex]$ sleep 100&
- [1] 6273
- [alex@cgdp alex]$ ps
- PID TTY TIME CMD
- 6230 pts/0 00:00:00 bash
- 6273 pts/0 00:00:00 sleep (待刪除的進(jìn)程)
- 6274 pts/0 00:00:00 ps
- [alex@cgdp alex]$ kill -9 6273
- [alex@cgdp alex]$ ps
- PID TTY TIME CMD
- 6230 pts/0 00:00:00 bash
- 6275 pts/0 00:00:00 ps
- [1]+ Killed sleep 100 (進(jìn)程已被刪除)
- disown命令可以用來刪除作業(yè)
- [alex@cgdp alex]$ ls -l | sleep 200&
- [1] 6326
- [alex@cgdp alex]$ jobs
- [1]+ Running ls --color=tty -l | sleep 200 &
- [alex@cgdp alex]$ disown %1
- [alex@cgdp alex]$ jobs
- [alex@cgdp alex]$
kill命令可以用來終止一個(gè)進(jìn)程
fg命令把后臺(tái)運(yùn)行的作業(yè)放到前臺(tái)運(yùn)行,bg重啟一個(gè)掛起的作業(yè)。
可以用 CTRL+z 將當(dāng)前進(jìn)程掛起到后臺(tái)暫停運(yùn)行,執(zhí)行一些別的操作,然后再用 fg 來將掛起的進(jìn)程重新放回前臺(tái)(也
可用 bg 來將掛起的進(jìn)程放在后臺(tái))繼續(xù)運(yùn)行。
wait命令停止腳本的運(yùn)行,直到后臺(tái)運(yùn)行的所有作業(yè)都結(jié)束為止,或者直到指定作業(yè)號(hào)或進(jìn)程號(hào)為選項(xiàng)的作業(yè)結(jié)束為止.可
以使用wait 命令來防止在后臺(tái)作業(yè)沒完成(這會(huì)產(chǎn)生一個(gè)孤兒進(jìn)程)之前退出腳本.#p#
例如:
寫一個(gè)簡(jiǎn)單的腳本test
- #!/bin/sh
- ls -l&
- echo "done"
運(yùn)行:
- alex@cgdp shell]$ ./test
- done
- [alex@cgdp shell]$ total 4
- -rwxrwxr-x 1 alex alex 30 May 5 21:15 test
使用wait命令重寫腳本test
- #!/bin/sh
- ls -l&
- wait
- echo "done"
運(yùn)行:
- [alex@cgdp shell]$ ./test
- total 4
- -rwxrwxr-x 1 alex alex 35 May 5 21:19 test
- done
【編輯推薦】