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

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

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

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

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

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