鍍金池/ 教程/ Linux/ UNIX 進(jìn)程管理
UNIX 文件權(quán)限/訪問模式
UNIX 系統(tǒng)性能
UNIX 管道和過濾器
UNIX 進(jìn)程管理
Shell 內(nèi)置數(shù)學(xué)函數(shù)
UNIX 環(huán)境
UNIX 文件管理
Unix
UNIX 網(wǎng)絡(luò)實(shí)用工具
UNIX 系統(tǒng)日志
UNIX 目錄管理
vi編輯器教程
Unix 基本工具(打印,電子郵件)
UNIX 用戶管理
UNIX 信號(hào)和陷阱
Unix 正則表達(dá)式SED
Unix 文件系統(tǒng)基礎(chǔ)
Unix是什么?
Unix 有用命令

UNIX 進(jìn)程管理

當(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)進(jìn)程:

當(dāng)你啟動(dòng)一個(gè)進(jìn)程(運(yùn)行命令),您可以運(yùn)行它有兩種方法:

  • 前臺(tái)進(jì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)程:

后臺(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è)命令提示。

列出正在運(yùn)行的進(jìn)程:

這是很容易看到自己的進(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.

停止進(jìn)程:

幾種不同的方法可以做到在結(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

父進(jìn)程和子進(jìn)程:

每個(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。

僵尸和孤兒進(jìn)程:

通常情況下,當(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)程:

守護(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命令:

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í)用工具