程序是爲了完成某種任務而設計的軟件,好比OpenOffice是程序。什麼是進程呢?進程就是運行中的程序。mysql
一個運行着的程序,可能有多個進程。 好比自學it網所用的WWW服務器是apache服務器,當管理員啓動服務後,可能會有好多人來訪問,也就是說許多用戶來同時請求httpd服務,apache服務器將會建立有多個httpd進程來對其進行服務。sql
進程通常分爲交互進程、批處理進程和守護進程三類。數據庫
值得一提的是守護進程老是活躍的,通常是後臺運行,守護進程通常是由系統在開機時經過腳本自動激活啓動或超級管理用戶root來啓動。好比在Redhat中,咱們能夠定義httpd 服務器的啓動腳本的運行級別,此文件位於/etc/init.d目錄下,文件名是httpd,/etc/init.d/httpd 就是httpd服務器的守護程序,當把它的運行級別設置爲3和5時,當系統啓動時,它會跟着啓動。apache
[root@localhost ~]# chkconfig --level 35 httpd on
進程ID(PID):是惟一的數值,用來區分進程;
父進程和父進程的ID(PPID);
啓動進程的用戶ID(UID)和所歸屬的組(GID);
進程狀態:狀態分爲運行R、休眠S、殭屍Z;
進程執行的優先級;
進程所鏈接的終端名;
進程資源佔用:好比佔用資源大小(內存、CPU佔用量);安全
他們的關係是管理和被管理的關係,當父進程終止時,子進程也隨之而終止。但子進程終止,父進程並不必定終止。好比httpd服務器運行時,咱們能夠殺掉其子進程,父進程並不會由於子進程的終止而終止。服務器
在進程管理中,當咱們發現佔用資源過多,或沒法控制的進程時,應該殺死它,以保護系統的穩定安全運行;工具
對於Linux進程的管理,是經過進程管理工具實現的,好比ps、kill、pgrep等工具;spa
ps 爲咱們提供了進程的一次性的查看,它所提供的查看結果並不動態連續的;若是想對進程時間監控,應該用top工具;設計
ps 的參數說明code
ps 提供了不少的選項參數,經常使用的有如下幾個;
l 長格式輸出;
u 按用戶名和啓動時間的順序來顯示進程;
j 用任務格式來顯示進程;
f 用樹形格式來顯示進程;
a 顯示全部用戶的全部進程(包括其它用戶);
x 顯示無控制終端的進程;
r 顯示運行中的進程;
ww 避免詳細參數被截斷;
咱們經常使用的選項是組合是aux 或lax,還有參數f的應用;
USER 進程的屬主; PID 進程的ID; PPID 父進程; %CPU 進程佔用的CPU百分比; %MEM 佔用內存的百分比; PRI 表明這個程序『可被執行的優先級』 NI 進程的NICE值,數值大,表示較少佔用CPU時間; VSZ 進程虛擬大小; RSS 駐留中頁的數量; TTY 終端ID STAT 進程狀態 D 不間斷的睡眠(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 命令的名稱和參數;
實例一: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
pgrep 是經過程序的名字來查詢進程的工具,通常是用來判斷程序是否正在運行。在服務器的配置和管理中,這個工具常被應用,簡單明瞭;
用法:
#pgrep 參數選項 程序名
經常使用參數
-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
終止一個進程或終止一個正在運行的程序,通常是經過 kill 、killall、pkill、xkill 等進行。好比一個程序已經死掉,但又不能退出,這時就應該考慮應用這些工具。
另外應用的場合就是在服務器管理中,在不涉及數據庫服務器程序的父進程的中止運行,也能夠用這些工具來終止。爲何數據庫服務器的父進程不能用這些工具殺死呢?緣由很簡單,這些工具在強行終止數據庫服務器時,會讓數據庫產生更多的文件碎片,當碎片達到必定程度的時候,數據庫就有崩潰的危險。好比mysql服務器最好是按其正常的程序關閉,而不是用pkill mysqld 或killall mysqld 這樣危險的動做;固然對於佔用資源過多的數據庫子進程,咱們應該用kill 來殺掉。