From: http://www.startos.com/zhuanti/linux20101115a/index.html
1、 進(jìn)程分類(lèi)
Linux 操作系統(tǒng)包括三種不同類(lèi)型的進(jìn)程它們是:交互進(jìn)程、批處理進(jìn)程和守護(hù)進(jìn)程。每種進(jìn)程都有自己的特點(diǎn)和屬性。交互進(jìn)程是由一個(gè)Shell啟動(dòng)的進(jìn)程。交互進(jìn)程既可以在前臺(tái)運(yùn)行,也可以在后臺(tái)運(yùn)行。批處理進(jìn)程和終端沒(méi)有聯(lián)系,是一個(gè)進(jìn)程序列。系統(tǒng)守護(hù)進(jìn)程是Linux系統(tǒng)啟動(dòng)時(shí)啟動(dòng)的進(jìn)程,并在后臺(tái)運(yùn)行。
說(shuō)明:
值得一提的是守護(hù)進(jìn)程總是活躍的,一般是后臺(tái)運(yùn)行,守護(hù)進(jìn)程一般是由系統(tǒng)在開(kāi)機(jī)時(shí)通過(guò)腳本自動(dòng)激活啟動(dòng)或超級(jí)管理用戶(hù)root來(lái)啟動(dòng)。比如在 Fedora中,我們可以定義httpd 服務(wù)器的啟動(dòng)腳本的運(yùn)行級(jí)別,此文件位于/etc/init.d目錄下,文件名是httpd,/etc/init.d/httpd 就是httpd服務(wù)器的守護(hù)程序,當(dāng)把它的運(yùn)行級(jí)別設(shè)置為3和5時(shí),當(dāng)系統(tǒng)啟動(dòng)時(shí),它會(huì)跟著啟動(dòng)。由于守護(hù)進(jìn)程是一直運(yùn)行著的,所以它所處的狀態(tài)是等待請(qǐng)求處理任務(wù)。
2 進(jìn)程的屬性
進(jìn)程ID(PID):是唯一的數(shù)值,用來(lái)區(qū)分進(jìn)程。
父進(jìn)程和父進(jìn)程的ID(PPID);
啟動(dòng)進(jìn)程的用戶(hù)ID(UID)和所歸屬的組(GID);
進(jìn)程狀態(tài):狀態(tài)分為運(yùn)行R、休眠S、僵尸Z;
進(jìn)程執(zhí)行的優(yōu)先級(jí);
進(jìn)程所連接的終端名;
進(jìn)程資源占用:比如占用資源大小(內(nèi)存、CPU占用量);
3、 父進(jìn)程和子進(jìn)程
他們的關(guān)系是管理和被管理的關(guān)系,當(dāng)父進(jìn)程終止時(shí),子進(jìn)程也隨之而終止。但子進(jìn)程終止,父進(jìn)程并不一定終止。比如httpd服務(wù)器運(yùn)行時(shí),我們可以殺掉其子進(jìn)程,父進(jìn)程并不會(huì)因?yàn)樽舆M(jìn)程的終止而終止。在進(jìn)程管理中,當(dāng)我們發(fā)現(xiàn)占用資源過(guò)多,或無(wú)法控制的進(jìn)程時(shí),應(yīng)該殺死它,以保護(hù)系統(tǒng)的穩(wěn)定安全運(yùn)行。
4、進(jìn)程管理
Linux管理進(jìn)程的最好方法就是使用命令行下的系統(tǒng)命令。Linux下面的進(jìn)程涉及的命令有比如ps、kill、pgrep等工具。
監(jiān)視進(jìn)程命令
1、ps(process status命令)
使用方式:ps [options] [--help]
功能說(shuō)明:顯示瞬間行程 (process) 的動(dòng)態(tài)
主要參數(shù):
ps 的參數(shù)非常多, 在此僅列出幾個(gè)常用的參數(shù)并大略介紹含義
-A 列出所有的行程
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細(xì)的資訊
-aux 顯示所有包含其他使用者的行程
范例: ps 如下圖:表示的順序?yàn)椋哼M(jìn)程標(biāo)號(hào)、設(shè)備、狀態(tài)、啟動(dòng)時(shí)間、命令。

2、pstree命令
使用方式:pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]
pstree -V
功能說(shuō)明:將所有行程以樹(shù)狀圖顯示, 樹(shù)狀圖將會(huì)以 pid (如果有指定) 或是以 init 這個(gè)基本行程為根 (root) ,如果有指定使用者 id , 則樹(shù)狀圖會(huì)只顯示該使用者所擁有的行程
主要參數(shù):
-a 顯示該行程的完整指令及參數(shù), 如果是被記憶體置換出去的行程則會(huì)加上括號(hào)。
-c 如果有重覆的行程名, 則分開(kāi)列出 (預(yù)設(shè)值是會(huì)在前面加上 *)。
范例: pstree 如下圖:

說(shuō)明:命令對(duì)程序名稱(chēng)相同的會(huì)自動(dòng)合并,所有"|-auto---4*[{automount}]"即表示系統(tǒng)中有4個(gè)automount進(jìn)程產(chǎn)生的子進(jìn)程。
3、top命令
使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
功能說(shuō)明:實(shí)時(shí)顯示 process 的動(dòng)態(tài)
主要參數(shù):
d : 改變顯示的更新速度,或是在交談式指令列( interactive command)按 s
q : 沒(méi)有任何延遲的顯示速度,如果使用者是有 superuser 的權(quán)限,則 top 將會(huì)以最高的優(yōu)先序執(zhí)行
c : 切換顯示模式,共有兩種模式,一是只顯示執(zhí)行檔的名稱(chēng),另一種是顯示完整的路徑與名稱(chēng)S : 累積模式,會(huì)將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來(lái)
s : 安全模式,將交談式指令取消, 避免潛在的危機(jī)
i : 不顯示任何閑置 (idle) 或無(wú)用 (zombie) 的行程
n : 更新的次數(shù),完成后將會(huì)退出 top
b : 批次檔模式,搭配 "n" 參數(shù)一起使用,可以用來(lái)將 top 的結(jié)果輸出到檔案內(nèi)
范例:顯示更新十次后退出 ; top -n 10 如下圖:
使用者將不能利用交談式指令來(lái)對(duì)行程下命令 :
top -s 如下圖:

PID(Process ID):進(jìn)程標(biāo)志號(hào),是非零正整數(shù)。
USER:進(jìn)程所有者的用戶(hù)名。
PR:進(jìn)程的優(yōu)先級(jí)別。
NI:進(jìn)程的優(yōu)先級(jí)別數(shù)值。
VIRT:進(jìn)程占用的虛擬內(nèi)存值。
RES:進(jìn)程占用的物理內(nèi)存值。
SHR:進(jìn)程使用的共享內(nèi)存值。
STAT:進(jìn)程的狀態(tài),其中S表示休眠,R表示正在運(yùn)行,Z表示僵死狀態(tài),N表示該進(jìn)程優(yōu)先值是負(fù)數(shù)。
%CPU:該進(jìn)程占用的CPU使用率。
%MEM:該進(jìn)程占用的物理內(nèi)存和總內(nèi)存的百分比。
TIME:該進(jìn)程啟動(dòng)后占用的總的CPU時(shí)間。
COMMAND:進(jìn)程啟動(dòng)的啟動(dòng)命令名稱(chēng),如果這一行顯示不下,進(jìn)程會(huì)有一個(gè)完整的命令行。
使用kill 命令控制進(jìn)程
使用方式: kill [-s <信息名稱(chēng)或編號(hào)>][程序] 或 kill [-l <信息編號(hào)>]
功能說(shuō)明: 刪除執(zhí)行中的程序或工作。kill可將指定的信息送至程序,預(yù)設(shè)的信息為 SIGTERM(15),可將指定程序終止。若仍無(wú)法終止該程序,可使用SIGKILL(9)信息嘗試強(qiáng)制刪除程序。程序或工作的編號(hào)可利用ps指令或 jobs指令查看。
主要參數(shù):
-l <信息編號(hào)> 若不加<信息編號(hào)>選項(xiàng),則-l參數(shù)會(huì)列出全部的信息名稱(chēng)。
-s <信息名稱(chēng)或編號(hào)> 指定要送出的信息。
說(shuō)明:
進(jìn)程是Linux系統(tǒng)中一個(gè)非常重要的概念。Linux是一個(gè)多任務(wù)的操作系統(tǒng),系統(tǒng)上經(jīng)常同時(shí)運(yùn)行著多個(gè)進(jìn)程。我們不關(guān)心這些進(jìn)程究竟是如何分配的,或者是內(nèi)核如何管理分配時(shí)間片的,所關(guān)心的是如何去控制這些進(jìn)程,讓它們能夠很好地為用戶(hù)服務(wù)。
kill命令的工作原理:
向Linux系統(tǒng)的內(nèi)核發(fā)送一個(gè)系統(tǒng)操作信號(hào)和某個(gè)程序的進(jìn)程標(biāo)識(shí)號(hào),然后系統(tǒng)內(nèi)核就可以對(duì)進(jìn)程標(biāo)識(shí)號(hào)指定的進(jìn)程進(jìn)行操作。
例如在top命令中,我們看到系統(tǒng)運(yùn)行許多進(jìn)程,有時(shí)就需要使用kill中止某些進(jìn)程來(lái)提高系統(tǒng)資源。在講解安裝和登陸命令時(shí),曾提到系統(tǒng)多個(gè)虛擬控制臺(tái)的作用是當(dāng)一個(gè)程序出錯(cuò)造成系統(tǒng)死鎖時(shí),可以切換到其它虛擬控制臺(tái)工作關(guān)閉這個(gè)程序。此時(shí)使用的命令就是 kill,因?yàn)閗ill是大多數(shù)Shell內(nèi)部命令可以直接調(diào)用的。
實(shí)例:使用kill命令
第一步:執(zhí)行find命令(#find asdfg /)。
說(shuō)明:很費(fèi)時(shí)間的命令。
第二步:查看find對(duì)應(yīng)的進(jìn)程號(hào)。(ps aux|grep find) 如圖:
顯示地項(xiàng)目共分為四項(xiàng),依次為PID(進(jìn)程ID)、TTY(終端名稱(chēng))、TIME(進(jìn)程執(zhí)行時(shí)間)、COMMAND(該進(jìn)程地命令行輸入)。

第三步:使用kill殺死find進(jìn)程(#kill 8269)。
進(jìn)程優(yōu)先級(jí)設(shè)定(nice命令)
使用方式:nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]
功能說(shuō)明:以更改過(guò)的優(yōu)先序來(lái)執(zhí)行程序, 如果未指定程序, 則會(huì)顯示出目前的排程優(yōu)先序, 內(nèi)定的 adjustment 為 10, 范圍為 -20 (最高優(yōu)先序) 到 19 (最低優(yōu)先序)
主要參數(shù):
-n adjustment, -adjustment, --adjustment=adjustment 皆為將該原有優(yōu)先序的增加 adjustment
--help 顯示求助訊息
--version 顯示版本資訊
范例: 將 ls 的優(yōu)先序加 1 并執(zhí)行 : nice -n 1 ls
注意 : 優(yōu)先序 (priority) 為操作系統(tǒng)用來(lái)決定 CPU 分配的參數(shù),Linux 使用『回合制(round-robin)』的演算法來(lái)做 CPU 排程,優(yōu)先序越高,所可能獲得的 CPU時(shí)間就越多。
定期或規(guī)定時(shí)間內(nèi)執(zhí)行Linux程序
1、定期時(shí)間內(nèi)執(zhí)行Linux程序(crontab)
使用方式: crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
功能說(shuō)明:crontab 是用來(lái)讓使用者在固定時(shí)間或固定間隔執(zhí)行程序之用,換句話(huà)說(shuō),也就是類(lèi)似使用者的時(shí)程表。-u user 是指設(shè)定指定 user 的時(shí)程表,這個(gè)前提是你必須要有其權(quán)限(比如說(shuō)是 root)才能夠指定他人的時(shí)程表。如果不使用 -u user 的話(huà),就是表示設(shè)定自己的時(shí)程表。
主要參數(shù):
-e : 執(zhí)行文字編輯器來(lái)設(shè)定時(shí)程表,內(nèi)定的文字編輯器是 VI,如果你想用別的文字編輯器,則請(qǐng)先設(shè)定 VISUAL 環(huán)境變數(shù)來(lái)指定使用那個(gè)文字編輯器(比如說(shuō) setenv VISUAL joe)
-r : 刪除目前的時(shí)程表
-l : 列出目前的時(shí)程表
時(shí)程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分鐘,f2 表示小時(shí),f3 表示一個(gè)月份中的第幾日,f4 表示月份,f5 表示一個(gè)星期中的第幾天。program 表示要執(zhí)行的程序。
當(dāng) f1 為 * 時(shí)表示每分鐘都要執(zhí)行 program,f2 為 * 時(shí)表示每小時(shí)都要執(zhí)行程序,其馀類(lèi)推
當(dāng) f1 為 a-b 時(shí)表示從第 a 分鐘到第 b 分鐘這段時(shí)間內(nèi)要執(zhí)行,f2 為 a-b 時(shí)表示從第 a 到第 b 小時(shí)都要執(zhí)行,其馀類(lèi)推
當(dāng) f1 為 */n 時(shí)表示每 n 分鐘個(gè)時(shí)間間隔執(zhí)行一次,f2 為 */n 表示每 n 小時(shí)個(gè)時(shí)間間隔執(zhí)行一次,其馀類(lèi)推
當(dāng) f1 為 a, b, c,... 時(shí)表示第 a, b, c,... 分鐘要執(zhí)行,f2 為 a, b, c,... 時(shí)表示第 a, b, c...個(gè)小時(shí)要執(zhí)行,其馀類(lèi)推。
說(shuō)明:使用者也可以將所有的設(shè)定先存放在檔案 file 中,用 crontab file 的方式來(lái)設(shè)定時(shí)程表。
例子1:每月每天每小時(shí)的第 0 分鐘執(zhí)行一次 /bin/ls :
0 * * * * /bin/ls
例子2:在 12 月內(nèi), 每天的早上 6 點(diǎn)到 12 點(diǎn)中,每隔 20 分鐘執(zhí)行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
注意 :當(dāng)程序在你所指定的時(shí)間執(zhí)行后,系統(tǒng)會(huì)寄一封信給你,顯示該程序執(zhí)行的內(nèi)容,若是你不希望收到這樣的信,請(qǐng)?jiān)诿恳恍锌找桓裰蠹由?> /dev/null 2>&1 即可 。
2、規(guī)定時(shí)間內(nèi)執(zhí)行Linux程序(at命令)
使用方式:at -V [-q queue] [-f file] [-mldbv] TIME
功能說(shuō)明:at 可以讓使用者指定在 TIME 這個(gè)特定時(shí)刻執(zhí)行某個(gè)程序或指令,TIME 的格式是 HH:MM其中的 HH 為小時(shí),MM 為分鐘,甚至你也可以指定 am, pm, midnight, noon, teatime(就是下午 4 點(diǎn)鍾)等口語(yǔ)詞。
如果想要指定超過(guò)一天內(nèi)的時(shí)間,則可以用 MMDDYY 或者 MM/DD/YY 的格式,其中 MM 是分鐘,DD 是第幾日,YY 是指年份。另外,使用者甚至也可以使用像是 now + 時(shí)間間隔來(lái)彈性指定時(shí)間,其中的時(shí)間間隔可以是 minutes, hours, days, weeks。
使用者也可指定 today 或 tomorrow 來(lái)表示今天或明天。當(dāng)指定了時(shí)間并按下 enter 之后,at 會(huì)進(jìn)入交談模式并要求輸入指令或程序,當(dāng)你輸入完后按下 ctrl+D 即可完成所有動(dòng)作,至于執(zhí)行的結(jié)果將會(huì)寄回你的帳號(hào)中。
主要參數(shù):
-V : 印出版本編號(hào)
-q : 使用指定的佇列(Queue)來(lái)儲(chǔ)存,at 的資料是存放在所謂的 queue 中,使用者可以同時(shí)使用多個(gè) queue,而 queue 的編號(hào)為 a, b, c... z 以及 A, B, ... Z 共 52 個(gè)
-m : 即使程序/指令執(zhí)行完成后沒(méi)有輸出結(jié)果, 也要寄封信給使用者
-f file : 讀入預(yù)先寫(xiě)好的命令檔。使用者不一定要使用交談模式來(lái)輸入,可以先將所有的指定先寫(xiě)入檔案后再一次讀入
-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)
-d : 刪除指定 (使用者也可以直接使用 atrm 而不用 at -d)
-v : 列出所有已經(jīng)完成但尚未刪除的指定
例子1: 三天后的下午 5 點(diǎn)鐘執(zhí)行 /bin/ls :
at 5pm +3 days /bin/ls
例子2: 三個(gè)星期后的下午 5 點(diǎn)鐘執(zhí)行 /bin/ls :
at 5pm +2 weeks /bin/ls
例子3: 明天的 17:20 執(zhí)行 /bin/date :
at 17:20 tomorrow /bin/date
例子4: 1999 年的最后一天的最后一分鐘印出 the end of world !
at 23:59 12/31/1999 echo the end of world !
其它系統(tǒng)管理命令
順序
|
命令
|
語(yǔ)法
|
功能
|
主要選項(xiàng)
|
1 |
man |
man [-k] [command_name] | 顯示參考手冊(cè),提供聯(lián)機(jī)幫助信息。 | -k表示指定關(guān)鍵字查詢(xún)的有關(guān)命令。 |
2 | uname | umane [選項(xiàng)] | 顯示目前的版本信息。 | [-a|m|n|r|s|v|help|version] |
3 | date | date? [選項(xiàng)] | 可以用來(lái)顯示或設(shè)定系統(tǒng)的日期與時(shí)間。 | [-d|help|s|u|-version] |
4 | cal | cal? [選項(xiàng)]? [月] [年] | 顯示某年某月的日歷。 | -j顯示第幾天;-y顯示整年日歷 |
5 | pwd | pwd | 顯示目前所在目錄。 | ? |
6 | free | free? [選項(xiàng)] | 顯示內(nèi)存狀態(tài)。 | [-b|k|m|o|s|t|V] |
7 | last | last? [選項(xiàng)][賬號(hào)][終端] | 列出目前與過(guò)去系統(tǒng)登錄用戶(hù)信息。 | [-a|d|f|n|R|x] |
8 | shutdown | shutdown[選項(xiàng)][時(shí)間][警告信息] | 系統(tǒng)關(guān)機(jī)命令。 | [-c|f|F|h|k|n|r|t] |
9 | halt | halt [選項(xiàng)] | 選擇性關(guān)閉系統(tǒng)命令 | [-d|f|i|n|p|w] |
10 | reboot | rebioot [選項(xiàng)] | 重新開(kāi)機(jī)命令。 | [-d|f|i|n|w] |
11 | init | init state | 改變系統(tǒng)狀態(tài)。 | [0-6|s/S] |
12 | runlevel | runlevel | 查看當(dāng)前系統(tǒng)所處運(yùn)行狀態(tài) | ? |
13 | login | login | 注冊(cè)進(jìn)入系統(tǒng)。 | ? |
14 | logout | logout | 用戶(hù)注銷(xiāo)。 | ? |
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
