?? 第十四章:進(jìn)程控制.txt
字號(hào):
第十四章:進(jìn)程控制
目標(biāo)
完成這一章,你能夠做以下事情:
使用ps命令
在后臺(tái)運(yùn)行進(jìn)程 ,并且使用ps命令監(jiān)視正在運(yùn)行的進(jìn)程的狀態(tài)
運(yùn)行一個(gè)后臺(tái)進(jìn)程并使其在你退出系統(tǒng)后不被掛起。
切換后臺(tái)進(jìn)程到前臺(tái)運(yùn)行。
掛起一個(gè)進(jìn)程。
停止進(jìn)程的運(yùn)行。
19.1 ps 命令
語(yǔ)法:
ps [-efl] 報(bào)告進(jìn)程的狀態(tài)
例子:
$ ps
PID TTY TIME COMMAND
1324 ttyp2 0:00 sh
1387 ttyp2 0:00 ps
$ ps -ef
UID PID PPID C STIME TTY TIME COMMAND
Root 0 0 0 Jan 1 ? 0:20 swapper
Root 1 0 0 Jan 23 ? 0:00 init
Root 2 0 0 Jan 23 ? 0:16 vhand
User3 1324 1 3 18:03:21 ttyp2 0:00 -sh
User3 1390 1324 22 18:30:23 ttyp2 0:00 ps -ef
系統(tǒng)中每個(gè)進(jìn)程在啟動(dòng)的時(shí)候都會(huì)被分配一個(gè)唯一號(hào)碼,這個(gè)號(hào)碼就叫進(jìn)程ID(PID)。ps 命令可以顯示當(dāng)前運(yùn)行中(或睡眠中)的進(jìn)程的信息,包括每個(gè)進(jìn)程的PID和每個(gè)進(jìn)程父進(jìn)程的 PID(PPID)。通過(guò)PID和PPID號(hào),你可以追蹤到你系統(tǒng)中任何進(jìn)程的起源。ps命令也會(huì)報(bào)告每個(gè)進(jìn)程的屬主和進(jìn)程是在哪個(gè)終端上執(zhí)行的。
ps 命令可以不帶參數(shù)執(zhí)行,結(jié)果會(huì)報(bào)告你當(dāng)前的終端會(huì)話線索的進(jìn)程信息。 -e選項(xiàng)會(huì)報(bào)告系統(tǒng)中每一個(gè)進(jìn)程的信息,而不僅僅是你自己運(yùn)行的進(jìn)程信息。 -f 和-l選項(xiàng)會(huì)報(bào)告長(zhǎng)的(long),或完全的(full)包含其他的細(xì)節(jié)的列表。
注意:ps 命令執(zhí)行時(shí)會(huì)集中使用CPU,你也許已經(jīng)注意到當(dāng)這個(gè)命令執(zhí)行的時(shí)候要過(guò)一會(huì)才有響應(yīng)
19.2 后臺(tái)進(jìn)程
語(yǔ)法:
命令>cmd.out &
例子:
$ grep user * > grep.out &
194
$ ps
PID TTY TIME COMMAND
164 ttyp2 0:00 sh
194 ttyp2 0:00 grep
195 ttyp2 0:00 ps
命令> cmd.out &
使命令在后臺(tái)執(zhí)行。
當(dāng)后臺(tái)任務(wù)開始后立刻返回提示符。
重定向命令的輸出,這樣命令的輸出就不會(huì)影響當(dāng)前屏幕的顯示。
退出系統(tǒng)會(huì)中止后臺(tái)運(yùn)行的進(jìn)程。用戶會(huì)在第一次試圖退出時(shí)收到一個(gè)警告:"There are running jobs"。用戶必須再次鍵入Exit 或ctrl+d來(lái)中止這個(gè)線索。
一些命令可能會(huì)執(zhí)行很長(zhǎng)的時(shí)間,例如在全部的磁盤上查找單個(gè)文件,或使用一個(gè)文本處理工具來(lái)格式化和打印一個(gè)手冊(cè)。UNIX操作系統(tǒng)允許你啟動(dòng)一個(gè)很消耗時(shí)間的程序,并且在讓它在后臺(tái)運(yùn)行。在后臺(tái),UNIX會(huì)讓這個(gè)程序繼續(xù)執(zhí)行。和其他的立即執(zhí)行的命令不同的是,shell不會(huì)等待后臺(tái)程序執(zhí)行完畢立即就會(huì)返回提示符,這樣你就可以繼續(xù)其它的工作。
在一個(gè)命令的末尾使用一個(gè)"&"符號(hào)可以使一個(gè)命令在后臺(tái)運(yùn)行。通常需要重定向后臺(tái)運(yùn)行的程序的輸出,以免后臺(tái)命令的輸出影響你當(dāng)前的終端線程。如果沒(méi)有重定向輸出,后臺(tái)命令會(huì)使用標(biāo)準(zhǔn)輸出,也就是會(huì)輸出到你的終端上。
由于shell控制標(biāo)準(zhǔn)輸入,而后臺(tái)運(yùn)行的命令不能夠從標(biāo)準(zhǔn)輸入接收數(shù)據(jù),因此,任何后臺(tái)運(yùn)行的命令要求輸入都必須使用輸入重定向從一個(gè)文件得到輸入數(shù)據(jù)。
當(dāng)一個(gè)命令被放在后臺(tái)執(zhí)行,如果設(shè)置了monitor選項(xiàng)(set -o moniotr),shell會(huì)報(bào)告命令的任務(wù)號(hào)和進(jìn)程ID,任務(wù)號(hào)定義了與你終端線索相聯(lián)系的任務(wù)。進(jìn)程ID為UNIX分配給每一個(gè)被執(zhí)行的進(jìn)程的唯一的號(hào)碼。Monitor選項(xiàng)會(huì)導(dǎo)致在后臺(tái)進(jìn)程完成之后會(huì)在終端上顯示一條信息:
[1] + Done grep user * > grep.out & 提示進(jìn)程執(zhí)行完畢
由于在后臺(tái)運(yùn)行的命令不和鍵盤通信,所以你不能夠通過(guò)中止鍵:ctrl + c來(lái)中斷一個(gè)后臺(tái)進(jìn)程,但后臺(tái)進(jìn)程可以通過(guò)kill命令來(lái)或退出系統(tǒng)來(lái)中斷執(zhí)行。
注意: 后臺(tái)進(jìn)程都要明確地重定向輸入和輸出。
注意: 一個(gè)后臺(tái)任務(wù)中可以同時(shí)包含多個(gè)命令,只要將這些命令用括號(hào)括起來(lái)(命令1,命令2,命令3),然后操作系統(tǒng)就會(huì)作為一個(gè)任務(wù)執(zhí)行這些命令。
19.3 將任務(wù)放在后臺(tái)/前臺(tái)運(yùn)行
jobs
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -