目錄:
1、程式和進程;
1.1 進程分類;
1.2 進程的屬性;
1.3 父進程和子進程;
2、進程管理;
2.1 ps 監視進程工具;
2.1.1 ps參數說明;
2.1.2 ps 應用舉例;
2.2 pgrep
3、終止進程的工具 kill 、killall、pkill、xkill;
3.1 kill
3.2 killall
3.3 pkill
3.4 xkill
4、top 監視系統任務的工具;
4.1 top 命令用法及參數;
4.2 top 應用舉例;
5、進程的優先順序: nice和renice;
6、關於本文;
7、後記;
1、程式和進程;
程式是為了完成某種任務而設計的軟體,比如OpenOffice是程式。什麼是進程呢?進程就是運行中的程式。一個運行著的程式,可能有多個進程。 比如 LinuxSir.Org 所用的WWW伺服器是apache伺服器,當管理員啟動服務後,可能會有好多人來訪問,也就是說許多使用者來同時請求httpd服務,apache伺服器將會建立有多個httpd進程來對其進行服務。
1.1 進程分類;
進程一般分為互動進程、批處理進程和守護進程三類。
值得一提的是守護進程總是活躍的,一般是後台運行,守護進程一般是由系統在開機時通過指令碼自動啟用啟動或超級系統管理使用者root來啟動。比如在Fedora或Redhat中,我們可以定義httpd 伺服器的啟動指令碼的運行層級,此檔案位於/etc/init.d目錄下,檔案名稱是httpd,/etc/init.d/httpd 就是httpd伺服器的精靈,當把它的運行層級設定為3和5時,當系統啟動時,它會跟著啟動。
[root@localhost ~]# chkconfig --level 35 httpd on
由於守護進程是一直運行著的,所以它所處的狀態是等待請求處理任務。比如,我們是不是訪問 LinuxSir.Org ,LinuxSir.Org 的httpd伺服器都在運行,等待著使用者來訪問,也就是等待著任務處理。
1.2 進程的屬性;
進程ID(PID):是唯一的數值,用來區分進程;
父進程和父進程的ID(PPID);
啟動進程的使用者ID(UID)和所歸屬的組(GID);
進程狀態:狀態分為運行R、休眠S、殭屍Z;
進程執行的優先順序;
進程所串連的終端名;
進程資源佔用:比如佔用資源大小(記憶體、CPU佔用量);
1.3 父進程和子進程;
他們的關係是管理和被管理的關係,當父進程終止時,子進程也隨之而終止。但子進程終止,父進程並不一定終止。比如httpd伺服器運行時,我們可以殺掉其子進程,父進程並不會因為子進程的終止而終止。在進程管理中,當我們發現佔用資源過多,或無法控制的進程時,應該殺死它,以保護系統的穩定安全運行;
2、進程管理;
對於Linux進程的管理,是通過進程管理工具實現的,比如ps、kill、pgrep等工具;
2.1 ps 監視進程工具;
ps 為我們提供了進程的一次性的查看,它所提供的查看結果並不動態連續的;如果想對進程時間監控,應該用top工具;
2.1.1 ps 的參數說明;
ps 提供了很多的選項參數,常用的有以下幾個;
l 長格式輸出;
u 按使用者名稱和啟動時間的順序來顯示進程;
j 用任務格式來顯示進程;
f 用樹形格式來顯示進程;
a 顯示所有使用者的所有進程(包括其它使用者);
x 顯示不控制終端的進程;
r 顯示運行中的進程;
ww 避免詳細參數被截斷;
我們常用的選項是組合是aux 或lax,還有參數f的應用;
ps aux 或lax輸出的解釋;
USER進程的屬主;PID進程的ID;PPID 父進程;%CPU進程佔用的CPU百分比;%MEM佔用記憶體的百分比;NI 進程的NICE值,數值大,表示較少佔用CPU時間;VSZ 進程虛擬大小;RSS 駐留中頁的數量;WCHAN TTY 終端IDSTAT 進程狀態D Uninterruptible sleep (usually IO)R 正在運行可中在隊列中可過行的; S 處於休眠狀態;T 停止或被追蹤; W 進入記憶體交換(從核心2.6開始無效);X 死掉的進程(從來沒見過);Z 殭屍進程;< 優先順序高的進程 N 優先順序較低的進程 L 有些頁被鎖進記憶體; s 進程的領導者(在它之下有子進程);l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)+ 位於背景進程組;WCHAN正在等待的進程資源;START 啟動進程的時間;TIME進程消耗CPU的時間;COMMAND 命令的名稱和參數; |
2.1.2 ps 應用舉例;
執行個體一:ps aux 最常用
[root@localhost ~]# ps -aux |more
可以用 | 管道和 more 串連起來分頁查看;
[root@localhost ~]# ps -aux > ps001.txt
[root@localhost ~]# more ps001.txt
這裡是把所有進程顯示出來,並輸出到ps001.txt檔案,然後再通過more 來分頁查看;
執行個體二:和grep 結合,提取指定程式的進程;
[root@localhost ~]# ps aux |grep httpd root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 /usr/sbin/httpd apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd root 4480 0.0 0.0 5160 708 pts/3 R+ 12:20 0:00 grep httpd |
執行個體二:父進和子進程的關係友好判斷的例子
[root@localhost ~]# ps auxf |grep httpd root 4484 0.0 0.0 5160 704 pts/3 S+ 12:21 0:00 \_ grep httpd root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 \_ /usr/sbin/httpd apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd |
這裡用到了f參數;父與子關係一目瞭然;
[NextPage]
2.2 pgrep
pgrep 是通過程式的名字來查詢進程的工具,一般是用來判斷程式是否正在運行。在伺服器的配置和管理中,這個工具常被應用,簡單明了;
用法:
#ps 參數選項 程式名
常用參數:
-l 列出程式名和進程ID;
-o 進程起始的ID;
-n 進程終止的ID;
舉例:
[root@localhost ~]# pgrep -lo httpd 4557 httpd [root@localhost ~]# pgrep -ln httpd 4566 httpd [root@localhost ~]# pgrep -l httpd 4557 httpd 4560 httpd 4561 httpd 4562 httpd 4563 httpd 4564 httpd 4565 httpd 4566 httpd [root@localhost ~]# pgrep httpd 4557 4560 4561 4562 4563 4564 4565 4566 |
3、終止進程的工具 kill 、killall、pkill、xkill;
終止一個進程或終止一個正在啟動並執行程式,一般是通過 kill 、killall、pkill、xkill 等進行。比如一個程式已經死掉,但又不能退出,這時就應該考慮應用這些工