新聞中心
進(jìn)程管理
如果用戶在 UNIX 操作系統(tǒng)上執(zhí)行了一個程序,那么操作系統(tǒng)會為這個程序創(chuàng)建一個運行它的特定環(huán)境。這個環(huán)境包含系統(tǒng)運行該程序所需的一切資源,使得好像系統(tǒng)中沒有運行其他程序一樣。

創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、宜都網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為宜都等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
用戶如果在 UNIX 操作系統(tǒng)中輸入一個指令,操作系統(tǒng)就會創(chuàng)建(啟動)一個相應(yīng)的進(jìn)程。比如,如果用戶希望使用 ls 指令來列出目錄內(nèi)的文件列表時,系統(tǒng)就啟動了一個進(jìn)程來完成這個任務(wù)。簡單的說,進(jìn)程就是一個可執(zhí)行程序的實例。
操作系統(tǒng)通過一個 5 位的 ID 號碼來追蹤進(jìn)程,這個 ID 號碼 通常被稱為pid 或進(jìn)程 ID。操作系統(tǒng)中的每一個進(jìn)程都有唯一 pid。
由于所有的進(jìn)程 ID 是循環(huán)使用的,所以 pid 是會重復(fù)的。不過,在操作系統(tǒng)中,不存在兩個進(jìn)程擁有統(tǒng)一進(jìn)程 ID 的情況。
創(chuàng)建進(jìn)程
如果用戶創(chuàng)建一個進(jìn)程(執(zhí)行一個指令),那么可以兩種方式來運行它。
- 前臺進(jìn)程
- 后臺進(jìn)程
前臺進(jìn)程
默認(rèn)情況下,任何一個用戶創(chuàng)建的進(jìn)程都會在前端執(zhí)行。該進(jìn)程可以從鍵盤獲取輸入信息并且可以將執(zhí)行結(jié)果反饋到顯示器上。
我們可以使用 ls 指令來觀察這個過程。如果用戶希望列出當(dāng)前目錄下的所有文件,用戶需要在終端命令行鍵入如下指令:
$ls ch*.doc這個指令將會顯示所有文件名稱以 ch 開頭,以 .doc 結(jié)尾的文件。
ch01-1.doc ch010.doc ch02.docch03-2.doc
ch04-1.doc ch040.doc ch05.docch06-2.doc
ch01-2.doc ch02-1.doc該指令對應(yīng)的進(jìn)程在前臺進(jìn)行,輸出結(jié)果直接顯示在顯示屏上,如果 ls 執(zhí)行需要獲取輸入,那么該進(jìn)程會等待來自鍵盤的輸入信息。
當(dāng)程序在前臺執(zhí)行的時候,用戶無法執(zhí)行其他的指令(創(chuàng)建其他的進(jìn)程),這是因為系統(tǒng)會提示其他進(jìn)程無法創(chuàng)建直到當(dāng)前進(jìn)程執(zhí)行完畢。
后臺進(jìn)程
后臺進(jìn)程不需要鍵盤輸入的信息就可以執(zhí)行。如果后臺進(jìn)程需要鍵盤等外設(shè)的輸入信息的話,那么它會等待。
后臺進(jìn)程的優(yōu)點是用戶可以執(zhí)行其他的指令。用戶此時不需要等待進(jìn)程結(jié)束就可以執(zhí)行其他的進(jìn)程。
開啟一個后臺進(jìn)程的最簡單的方法就是在指令的末尾添加 & 標(biāo)識符。
$ls ch*.doc &這個指令也會示所有文件名稱以 ch 開頭,以 .doc 結(jié)尾的文件。
ch01-1.doc ch010.doc ch02.docch03-2.doc
ch04-1.doc ch040.doc ch05.docch06-2.doc
ch01-2.doc ch02-1.doc如果這里的 ls 指令希望得到輸入信息,它會轉(zhuǎn)換為停止?fàn)顟B(tài)直到用戶將他轉(zhuǎn)到前臺并獲取到從鍵盤來的輸入信息。
第一行顯示了后臺進(jìn)程的信息——作業(yè)號和進(jìn)程 ID,用戶需要使用作業(yè)號來完成前景和后臺之間的切換。
如果用戶按下回車鍵,可以看到如下信息:
[1] + Done ls ch*.doc &
$第一行表示 ls 指令的后臺進(jìn)程已經(jīng)成功執(zhí)行。第二行提示可以執(zhí)行其他的指令。
列出處于執(zhí)行狀態(tài)的進(jìn)程
可以使用 ps 指令來顯示當(dāng)前操作系統(tǒng)處于執(zhí)行狀態(tài)的進(jìn)程,結(jié)果如下:
$ps
PID TTY TIMECMD
18358 ttyp3 00:00:00sh
18361 ttyp3 00:01:31abiword
18789 ttyp3 00:00:00ps使用 ps 指令時,通常會選擇 -f 選項。該選項可以顯示更為詳細(xì)的內(nèi)容。
$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下面是 -f 選項列出內(nèi)容的的相關(guān)解釋。
| 列名稱 | 意義 |
|---|---|
| UID | 執(zhí)行該進(jìn)程的用戶ID |
| PID | 進(jìn)程編號 |
| PPID | 該進(jìn)程的父進(jìn)程編號 |
| C | 該進(jìn)程所在的CPU利用率 |
| STIME | 進(jìn)程執(zhí)行時間 |
| TTY | 進(jìn)程相關(guān)的終端類型 |
| TIME | 進(jìn)程所占用的CPU時間 |
| CMD | 創(chuàng)建該進(jìn)程的指令 |
如下是其他配合 ps 指令的選項:
| 選項 | 意義 |
|---|---|
| -a | 顯示所有用戶的信息 |
| -x | 顯示關(guān)于沒有終端的進(jìn)程的信息 |
| -u | 顯示類似 -f 的其他附加信息 |
| -e | 顯示擴(kuò)展信息 |
停止進(jìn)程執(zhí)行
用戶可以使用多種方式來停止一個進(jìn)程。通常情況下,可以通過終端指令來完成,比如,同時按下 CTRL+C 鍵就可以停止當(dāng)前執(zhí)行的指令。這種方式僅在程序以前臺的方式執(zhí)行的情況下起作用。
如果一個進(jìn)程以后臺的方式在執(zhí)行,那么首先用戶需要通過 ps 指令來獲取它的作業(yè)編號,然后用戶可以使用 kill 指令來殺掉該進(jìn)程。如下:
$ps -f
UID PID PPID C STIMETTY 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 對應(yīng)的進(jìn)程。如果某個進(jìn)程無視常規(guī)的 kill 指令。用戶可以使用 kill -9 后跟進(jìn)程編號的方式來終止指令,如下:
$kill -9 6738
Terminated
父進(jìn)程和子進(jìn)程
UNIX 系統(tǒng)中的每一個進(jìn)程都有兩個 ID 號碼:進(jìn)程 ID(pid)和父進(jìn)程 ID(ppid).系統(tǒng)中的每一個用戶進(jìn)程均有父進(jìn)程。
大部分使用 shell 執(zhí)行的指令均有他們各自的父進(jìn)程。使用 ps -f 指令可以顯示出每個進(jìn)程相對應(yīng)的進(jìn)程 ID和其父進(jìn)程 ID.
僵尸進(jìn)程和孤兒進(jìn)程
通常情況下,當(dāng)某個子進(jìn)程被殺掉后,其父進(jìn)程會被 SIGCHILD 信號通知。然后,該父進(jìn)程會做一些必要的操作或者啟動一個新的子進(jìn)程。然而,有時候是父進(jìn)程先于子進(jìn)程被殺掉。這種情況下,被稱為“所有進(jìn)程的父進(jìn)程”的 init 進(jìn)程就稱為該子進(jìn)程的父進(jìn)程。這些子進(jìn)程也稱為孤兒進(jìn)程。
當(dāng)某個進(jìn)程被殺掉后,ps 指令列出的列表里顯示該進(jìn)程標(biāo)志位 Z 狀態(tài)。它就是一個僵尸進(jìn)程。該進(jìn)程處于死亡狀態(tài)并且不會被再次使用。這些進(jìn)程不同于孤兒進(jìn)程。他們是已經(jīng)完成任務(wù)的進(jìn)程,但是仍在進(jìn)程表中留有一個入口。
守護(hù)進(jìn)程
守護(hù)進(jìn)程是操作系統(tǒng)相關(guān)的后臺進(jìn)程,他們通常以 root 權(quán)限執(zhí)行,并且會相應(yīng)其他進(jìn)程的請求。
守護(hù)進(jìn)程沒有控制終端。它也不能打開 /dev/tty。如果用戶使用"ps -ef" 指令來查看 tty 域,所有的守護(hù)進(jìn)程在該域都會顯示?。
更詳細(xì)的來講,守護(hù)進(jìn)程就是執(zhí)行在后臺的進(jìn)程,且它會等待某個事件的發(fā)生,從而相應(yīng)該事件。比如打印機(jī)守護(hù)進(jìn)程一直在等待打印的指令。
如果用戶的某個程序需要長時間的執(zhí)行,那么可以將它設(shè)計為守護(hù)進(jìn)程的啟動方式。
top 指令
top 指令是用于顯示以不同條件排序進(jìn)程的指令。
它是一個頻繁更新的交互式診斷工具,會動態(tài)的顯示如下和相關(guān)進(jìn)程的如下信息:物理內(nèi)存、虛擬內(nèi)存、CPU 利用率、負(fù)載率。
下面是一個簡單的例子來執(zhí)行 top 指令,且查看不同繼承的CPU使用率。
$top
作業(yè)編號與進(jìn)程號
后臺的且阻塞狀態(tài)的進(jìn)程通常使用作業(yè)編號來維護(hù)。該作業(yè)編號不同于進(jìn)程編號。
此外,作業(yè)可以包含多個進(jìn)程,這些進(jìn)程可以串行執(zhí)行,也可以并行執(zhí)行,所以使用作業(yè)編號比跟蹤單個的進(jìn)程會更加簡單。
網(wǎng)站題目:創(chuàng)新互聯(lián)UNIX教程:UNIX進(jìn)程管理
路徑分享:http://m.fisionsoft.com.cn/article/dhdejge.html


咨詢
建站咨詢
