Linux進程管理
序:
主要學習任務:
判斷服務器健康狀態
查看運行進程
強行終止進程
進程和程序的區別
一動一靜,對應關係-多對多
父進程與子進程
老子管兒子,殭屍和孤兒.
前臺進程和後臺進程
前臺進程
例:ping 127.0.0.1 >>ping.result
在Shell提示處打投入命令後,創建一個子進程,運行命令,Shell等待它的
結束,然後才能返回給用戶提示符。這條命令在前臺運行,用戶在它完成
之前不能執行另一個命令。
後臺進程
例:ping 127.0.0.1 >>ping.result & 將結果保存到ping.result文件
在Shell提示處打入一個命令,若後隨一個&,Shell創建子進程運行此命令,
但不等待命令退出,而是直接返回到對用戶給出提示。
後臺進程必須是非交互式的。
擴展:
watch -n 1 ls -l
監聽某個命令執行效果,-n時間刷新頻露1s
一、進程常用命令
1、w
09:49:34 up 4 min, 2 users, load average: 0.42, 0.81, 0.38
服務器時間開機時長 登錄用戶數 平均負載:1、5、15分鐘(一般0.8以下,說明較輕)
USER 登錄用戶名
TTY 在哪登錄 :0表示XWindow登錄
FROM 來自哪裏 :0.0 表示來自於XWindow - 表示本地命令行登錄
LOGIN@ 什麼時候登錄的
IDLE 空閒時間
JCPU 該終端消耗的CPU時間
PCPU 正在執行程序消耗的時間
WHAT 正在做什麼
2、who 簡單查看登陸者信息
3、ps查看進程信息 (process status)
-a 顯示終端下的進程(不含其他用戶)
-u 顯示用戶和啓動時間
-x 表示沒有控制終端的進程
-e 顯示所有進程,包括沒有控制終端的進程
-l 長格式顯示
應用實例
ps 顯示當前用戶自己的進程
ps-l 查看隸屬於自己的進程詳細信息
ps uU 用戶名 查看系統中指定用戶執行的進程
ps -le 或 aux 查看所有用戶執行的進程詳細信息 用得很多 aux可以查看到apache進程是哪個用戶
通常結合grep使用 如 ps -le | grep httpd 查看apache進程是否啓動
/etc/rc.d/init.d/httpd status 通過啓動腳本,也能查看進程是否已啓動
ps -le --sortpid 可按pid排序
ps–aux | grep jack 查看jack用戶的進程
pstree| more 樹狀結構顯示進程
常見選項的含義
PID 進程號 (process id) 1爲init 系統第一個進程
PPID 父進程的進程號(parent process id)
TTY 啓動的終端 tty1-7本地 1-6字符 7圖形 pts/n遠程
STAT 進程當前狀態: S休眠 D不可中斷的休眠 R運行 Z僵死 T停止
NI 進程優先級
TIME 進程自啓動以來佔用CPU的總時間
COM/COMMAND 進程的命令名
USER 用戶名 (ps -uU 用戶名)
%CPU 佔用CPU時間和總時間的百分比
%MEM 佔用內存與系統內存的百分比
start 進程觸發時間
time 佔用cpu時間
command 進程本身
4、kill 殺死一個進程
爲什麼要殺死進程?
該進程佔用了過多的CPU時間
該進程鎖住的一個終端,使其它前臺進程無法運行
運行時間過長,但沒有預期的效果
產生了過多的到屏幕或磁盤文件輸出 例如find / -name "*"
無法正常退出
關閉進程 kill 進程號(PID)
apache的httpd有很多個,我們關閉了父進程,子進程將自動關閉
或調用/etc/rc.d/init.d/httpd stop
kill的信號 kill -l可以列出
kill -9 進程號 (強行關閉)
kill -1 進程號 (重啓進程)
也可以調用/etc/rc.d/init.d/httpd restart重啓apache進程
關閉圖形程序 xkill 鼠標按哪兒,將關閉哪兒 點右鍵取消
結束所有同名進程 killall -9進程名稱 (如killall httpd)
5、以p開頭的命令
pgrep httpd 查看httpd進程的所有pid
重啓apache進程:kill -1 `pgrep httpd`
pkill httpd 直接關閉httpd進程,不用查pid了
pkill -9 -t 終端號 踢出登錄用戶
6、優先級命令
nice
指定程序進行的優先級
格式nice n myprogram
例nice --5 /etc/rc.d/init.d/httpd start (默認是0,指定爲-5)
ps -le | grep httpd # NI進程優先級
renice
改變一個正在進行的進程的優先級
例renice n pid
優先級取值範圍爲(-20,19)默認是0 值越小,權越大
ps -le 中,NI就是優先級
7、前後臺進程操作
一個符號:
把進程放到後臺運行在後面加 &
ping 127.0.0.1>>/test/ping.result &
另一個終端去查看:
tail -f/test/ping.result
兩個操作:
進程的掛起和終止
掛起 ctrl+z 暫停 # ping 127.0.0.1 然後按ctrl+z 此時進程未終止,在後臺停止
終止 ctrl+c # ping 127.0.0.1 然後按ctrl+c 進程終止,釋放資源
三個命令:
查看被掛起或在後臺執行的進程
jobs
進程的恢復
fg [序號] 恢復到前繼續運行
bg[序號] 恢復到後臺繼續運行
若不加序號,則默認將命令作用於+修飾的進程
8、top命令
上面的信息,類似於w顯示的信息
第一行:系統當前時間 系統持續時間 登錄用戶 1,5,15分鐘之前的平均負載
第二行:進程總數
第三行:CPU佔用率 %id 空閒百分比
第四行:內存使用: 總共 使用 空閒 緩存
第五行:swap使用
下面類似於ps –le信息
內置命令d 然後輸入5,將改爲每5秒刷新一次
內置命令c 顯示整個命令行,而不僅僅顯示命令名 command
u用戶名 只顯示某用戶的信息,管理員可以查看某個用戶在做什麼,
k 提示輸入pid 關閉進程
可以在u查看某個用戶時,kill掉用戶的bash進程,
將用戶踢下線,提示輸入 kill的信號,例如9強制關閉
r 調優先級
M 內存排序
P CPU排序
q 退出
hor ? 幫助信息
9、free –m 查看內存狀態
10、查看proc文件下信息
ls/proc
該目錄存放的是進程信息,數字是以pid爲目錄名,信息存放在目錄中
cat/proc/cpuinfo 查看cpu信息
cat/proc/meminfo 內存信息
cat/proc/partitions 分區信息
三、進程分類
1、分類
standalone 獨立運行
xinetd 進程託管
atd、crond 計劃任務
standalone 獨立運行
如apache、mysql的服務,啓動後,進程會一直在系統中,
佔用CPU和內存資源,等待或處理客戶端的請求
佔用系統資源多,但響應速度快
xinetd 進程託管 (需要獨立安裝yum -y install xinetd)
有些服務,用得很少,沒必要獨立運行例如telnet服務
ls /etc/xinetd.d 查看這個目錄中有很多腳本
服務不啓動,由xinetd監聽這個端口,有客戶端訪問,則啓動進程,等服務完成後,結束進程
響應速度慢一點,但減少了系統資源佔用
atd、crond 計劃任務
每隔一分鐘,從休眠中醒來一次,所以,計劃任務不能精確到秒。
2、管理
#chkconfig --list
運行級別:0-6
0 關機
1 單用戶模式
2 不完全多用戶,不包含NFS服務
3 完全多用戶 字符界面
4 未分配
5 圖形界面
6 重啓
init 0關機 init5 startx init 3
init 6重啓
runlevel 查詢系統當前運行級別
vi /etc/inittab
id:3:initdefault: 定義系統默認運行級別
列出在每一種運行級別下服務是啓動還是關閉
chkconfig --list | grep atd 查看計劃任務服務
3、啓動服務
RPM包安裝的服務:
service 服務名 start|stop|restart|status
例service network start
能被service命令識別是因爲,在/etc/rc.d/init.d/下有服務執行腳本
/etc/rc.d/init.d/服務名 start|stop|restart|status
例/etc/rc.d/init.d/httpd start
設置開機自啓動
vi /etc/rc.local ---->/etc/rc.d/rc.local
例/etc/rc.d/init.d/httpd start
ntsysv (setup中會調用此工具)
所有系統默認安裝服務都可以使用ntsysv命令進行自啓動管理
源碼包安裝的服務:
絕對路徑啓動
/usr/local/apache2/bin/apachectl start
開機自啓動
vi/etc/rc.local
寫入啓動命令
/usr/local/apache2/bin/apachectl start