當(dāng)你執(zhí)行一個(gè)程序在UNIX系統(tǒng)上,該系統(tǒng)為該程序創(chuàng)建一個(gè)特殊的環(huán)境。這個(gè)環(huán)境包含系統(tǒng)運(yùn)行的程序,如果沒有其他程序在系統(tǒng)上運(yùn)行所需要的一切。
每當(dāng)你發(fā)出命令在UNIX中,創(chuàng)建或啟動(dòng)一個(gè)新的進(jìn)程。當(dāng)你嘗試了合列出目錄的內(nèi)容,你啟動(dòng)了一個(gè)進(jìn)程。一個(gè)過程,簡(jiǎn)單來說,就是一個(gè)正在運(yùn)行的程序的一個(gè)實(shí)例。
操作系統(tǒng)將跟蹤進(jìn)程稱為PID或進(jìn)程ID通過五位ID號(hào)。該系統(tǒng)中的每個(gè)進(jìn)程都有一個(gè)唯一的pid。
PIDS最終重復(fù),因?yàn)樗锌赡艿臄?shù)字和未來的PID滾動(dòng)或重新開始。在任何一個(gè)時(shí)間,沒有兩個(gè)具有相同的pid的進(jìn)程在系統(tǒng)中存在,因?yàn)樗荱NIX使用跟蹤每個(gè)進(jìn)程的pid。
當(dāng)你啟動(dòng)一個(gè)進(jìn)程(運(yùn)行命令),您可以運(yùn)行它有兩種方法:
前臺(tái)進(jìn)程
后臺(tái)進(jìn)程
默認(rèn)情況下,每一個(gè)過程,你開始在前臺(tái)運(yùn)行。從鍵盤輸入,并將其輸出到屏幕上。
使用ls命令,你可以看到這一點(diǎn)。如果我要列出當(dāng)前目錄中的所有文件,就可以使用下面的命令:
$ls ch*.doc
這將顯示所有文件的名稱開始ch和結(jié)束以 .doc:
ch01-1.doc ch010.doc ch02.doc ch03-2.doc ch04-1.doc ch040.doc ch05.doc ch06-2.doc ch01-2.doc ch02-1.doc
程序在前臺(tái)運(yùn)行,輸出定向到我的屏幕,如果ls命令希望任何輸入(事實(shí)并非如此),它會(huì)等待從鍵盤。
當(dāng)程序在前臺(tái)運(yùn)行,并采取太多的時(shí)間,我們不能運(yùn)行任何其他命令(啟動(dòng)任何其他的進(jìn)程),因?yàn)樘崾緦o法使用,直到程序完成其加工出來。
后臺(tái)進(jìn)程運(yùn)行,而無需連接到你的鍵盤。如果后臺(tái)進(jìn)程需要任何鍵盤輸入,它會(huì)等待。
進(jìn)程在后臺(tái)運(yùn)行的優(yōu)點(diǎn)是,你可以運(yùn)行其他命令,你不必等待,直到它完成啟動(dòng)另一個(gè)!
啟動(dòng)一個(gè)后臺(tái)進(jìn)程的最簡(jiǎn)單的方法是在命令末尾添加一個(gè)符號(hào)(&)。
$ls ch*.doc &
這也將顯示所有文件的名稱開始ch和結(jié)束的 .doc:
ch01-1.doc ch010.doc ch02.doc ch03-2.doc ch04-1.doc ch040.doc ch05.doc ch06-2.doc ch01-2.doc ch02-1.doc
這里如果ls命令希望任何輸入(事實(shí)并非如此),進(jìn)入停止?fàn)顟B(tài),直到我把它移動(dòng)到前臺(tái),并給它的數(shù)據(jù)從鍵盤。
也就是說第一行包含有關(guān)后臺(tái)進(jìn)程的信息 - 工作的數(shù)量和進(jìn)程ID。你需要了解作業(yè)的數(shù)量,操縱它在前臺(tái)和后之間。
如果你現(xiàn)在按下回車鍵,看到以下內(nèi)容:
[1] + Done ls ch*.doc & $
第一行告訴你ls命令的后臺(tái)進(jìn)程成功完成。第二個(gè)是另一個(gè)命令提示。
這是很容易看到自己的進(jìn)程運(yùn)行的ps(進(jìn)程狀態(tài))命令如下:
$ps PID TTY TIME CMD 18358 ttyp3 00:00:00 sh 18361 ttyp3 00:01:31 abiword 18789 ttyp3 00:00:00 ps
其中最常用的標(biāo)志 -f ( f for full) 選項(xiàng),它提供了更多的信息,如下面的示例所示:
$ps -f UID PID PPID C STIME TTY TIME CMD amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
這里是ps-f命令顯示的所有字段的描述:
Column | 描述 |
---|---|
UID | User ID that this process belongs to (the person running it). |
PID | Process ID. |
PPID | Parent process ID (the ID of the process that started it). |
C | CPU utilization of process. |
STIME | Process start time. |
TTY | Terminal type associated with the process |
TIME | CPU time taken by the process. |
CMD | The command that started this process. |
還有其他的選擇可以一起使用ps命令:
Option | 描述 |
---|---|
-a | Shows information about all users |
-x | Shows information about processes without terminals. |
-u | Shows additional information like -f option. |
-e | Display extended information. |
幾種不同的方法可以做到在結(jié)束過程。通常情況下,從一個(gè)基于控制臺(tái)的命令,發(fā)送CTRL + C按鍵(默認(rèn)中斷字符)將退出命令。這工作進(jìn)程正在運(yùn)行時(shí)在前臺(tái)模式。
如果一個(gè)進(jìn)程在后臺(tái)模式下運(yùn)行,那么首先你需要得到其作業(yè)ID,使用ps命令后,你可以使用kill命令來殺死進(jìn)程如下:
$ps -f UID PID PPID C STIME TTY TIME CMD amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f $kill 6738 Terminated
這里kill命令將終止first_one的過程。如果一個(gè)進(jìn)程忽略了正規(guī)的kill命令,你可以使用kill-9進(jìn)程ID如下:
$kill -9 6738 Terminated
每個(gè)UNIX進(jìn)程有兩個(gè)ID號(hào)分配給它的進(jìn)程ID(PID)和父進(jìn)程ID(PPID)。系統(tǒng)中的每一個(gè)用戶進(jìn)程都有一個(gè)父進(jìn)程。
您運(yùn)行的大部分命令作為其父的shell。檢查ps -f 這個(gè)命令列出進(jìn)程ID和父進(jìn)程ID。
通常情況下,當(dāng)一個(gè)孩子被殺害,被告知父進(jìn)程通過一個(gè)SIGCHLD信號(hào)。然后,父進(jìn)程可以做一些其他的任務(wù),或者需要重新啟動(dòng)一個(gè)新的子進(jìn)程。然而,有時(shí)父進(jìn)程在子進(jìn)程之前被殺死。在這種情況下,“父的所有進(jìn)程,”init進(jìn)程,成為新的PPID(父進(jìn)程ID)。有時(shí),這些進(jìn)程被稱為孤兒進(jìn)程。
當(dāng)一個(gè)進(jìn)程被殺死,ps列出可能仍然顯示一個(gè)Z狀態(tài)的過程。這是一具僵尸或解散過程。進(jìn)程是死的,不被使用。這些過程是不同于孤立進(jìn)程。它們是已完成執(zhí)行的處理,但仍然有進(jìn)程表中的一個(gè)條目。
守護(hù)進(jìn)程是系統(tǒng)相關(guān)的后臺(tái)進(jìn)程,往往根和服務(wù)請(qǐng)求來自其他進(jìn)程的權(quán)限運(yùn)行。
守護(hù)進(jìn)程沒有控制終端。它不能打開/dev/tty。如果你用“ps-ef”,并期待在tty字段中,所有的守護(hù)進(jìn)程將有一個(gè)嗎? tty。
更清楚的是,僅僅是一個(gè)守護(hù)進(jìn)程在后臺(tái)運(yùn)行的進(jìn)程,通常在等待一些事情發(fā)生,它是有能力的工作,就像一臺(tái)打印機(jī)守護(hù)進(jìn)程正在等待打印命令。
如果你有一個(gè)程序需要做長(zhǎng)期處理,那么使其成為一個(gè)守護(hù)進(jìn)程,它在后臺(tái)運(yùn)行。
top命令是一個(gè)非常有用的工具,用于快速顯示按各種標(biāo)準(zhǔn)排序的的進(jìn)程。
這是一個(gè)互動(dòng)的診斷工具,經(jīng)常更新,并顯示物理和虛擬內(nèi)存,CPU使用率,平均負(fù)載,以及您繁忙的的進(jìn)程的信息。
下面是簡(jiǎn)單的語法來運(yùn)行top命令,并看到不同進(jìn)程的CPU利用率的統(tǒng)計(jì):
上一篇:Unix 有用命令下一篇:UNIX 網(wǎng)絡(luò)實(shí)用工具