進程管理

進程管理

進程管理
知識要點
認識進程
進程和程序的關係
進程相關操作
查看系統性能
進程是什麼
程序
保存在硬盤、光盤等介質中的可執行代碼和數據
是靜態保存的代碼
進程
在CPU及內存中運行的動態執行的程序代碼
進程是程序運行的實例
同一個程序可能對應多個進
子進程和父進程
INIT進程是系統中第一個進程,PID永遠是1
[[email protected] ~]# ps -f
UID PID PPID  C STIME TTY TIME CMD
root     10872 10870 0 13:17 pts/3 00:00:00 -bash
root     11267 10872 0 16:36 pts/3 00:00:00 bash
進程相關操作
PS命令
用途:查看靜態的進程統計信息
格式:ps aux
ps -elf
常用命令選項
  • ax:顯示所有進程信息
  • u:使用以用戶爲主的格式輸出進程信息
  • -e:顯示系統內的所有進程信息
  • -l:使用長格式顯示進程信息
  • -f:使用完整的格式顯示進程信息
ps aux:
  • USER 進程的用戶;
  • PID 進程的ID;
  • %CPU 進程佔用的CPU百分比;
  • %MEM 佔用內存的百分比;
  • VSZ 該進程使用的虛擬內存量(KB);
  • RSS 該進程佔用的物理內存量(KB);
  • TTY 該進程在哪個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。若爲pts/0等,則表示由網絡連接主機進程;
  • STAT 進程狀態
  • START 該進程啓動時間;
  • TIME 該進程實際使用CPU運行的時間;
  • COMMAND 命令的名稱和參數;
ps -elf:
  • F 進程的flag, 4 代表使用者爲 super user
  • S 進程狀態
  • UID 進程的用戶;
  • PID 進程的ID;
  • PPID 父進程的ID
  • C CPU利用率,以整數表示
  • PRI Priority的縮寫
  • NI Nice的縮
  • PRI/NI 代表此進程被 CPU 所執行的優先順序,數值越小代表該進程越快被 CPU 執行。
  • ADDR 指出該進程內存的地址,如果是 running的程序,一般就是 "-"
  • SZ 佔用內存大小;
  • WCHAN 是否正在運作當中,若爲 - 表示正在運作
  • STIME 進程的啓動時間
  • TTY 該進程在哪個終端上運行(登陸者的終端位置)
  • TIME 該進程實際使用CPU運行的時間;
  • CMD 命令的名稱和參數;
top命令
用途:查看動態的進程排名信息
P:按%CPU排序
M:按%MEM排序
空格:馬上刷新
[[email protected] ~]# top
top - 06:08:48 up 4 days, 6:57, 1 user,  load average: 0.00, 0.00, 0.00
Tasks: 60 total, 1 running, 59 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 0.7% sy, 0.0% ni, 97.4% id, 0.4% wa, 0.1% hi, 1.1% si
Mem: 191228k total, 171424k used, 19804k free, 19436k buffers
Swap: 265064k total, 1284k used, 263780k free, 120480k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 6779 root      16 0 2536 832 668 R  3.8 0.4 0:00.04 top
 1 root      16 0 2648 604 520 S  0.0 0.3 0:13.54 init
 2 root      34 19 0 0 0 S  0.0 0.0 0:00.07 ksoftirqd/0
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
  • 01:06:48 當前時間
  • up 1:22 系統運行時間,格式爲時:分
  • 1 user 當前登錄用戶數
  • load average: 0.06, 0.60, 0.48 系統負載,即任務隊列的平均長度。三個數值分別爲 1分鐘、5分鐘、15分鐘前到現在的平均值。
w和uptime 命令也能看到這些信息
Tasks:
29 total, 1 running, 28 sleeping, 0 stopped, 0 zombieCpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0%st
  • total 進程總數
  • running 正在運行的進程數
  • sleeping 睡眠的進程數
  • stopped 停止的進程數
  • zombie 殭屍進程數
  • Cpu(s):
  • 0.3%us 用戶空間佔用CPU百分比
  • 1.0% sy 內核空間佔用CPU百分比
  • 0.0% ni 用戶進程空間內改變過優先級的進程佔用CPU百分比
  • 98.7% id 空閒CPU百分比
  • 0.0% wa 等待輸入輸出的CPU時間百分比
  • 0.0%hi:硬件CPU中斷佔用百分比
  • 0.0%si:軟中斷佔用百分比
  • 0.0%st:虛擬機佔用百分比
Mem:
191272k total, 173656k used, 17616k free, 22052k buffersSwap: 192772k total, 0k used, 192772k free, 123988k cached
  • Mem:
  • 191272k total 物理內存總量
  • 173656k used 使用的物理內存總量
  • 17616k free 空閒內存總量
  • 22052k buffers 用作內核緩存的內存量
  • Swap:
  • 192772k total 交換區總量
  • 0k used 使用的交換區總量
  • 192772k free 空閒交換區總量
  • 123988k cached 緩衝的交換區總量,內存中的內容被換出到交換區,而後又被換入到內存,但使用過的交換區尚未被覆蓋,該數值即爲這些內容已存在於內存中的交換區的大小,相應的內存再次被換出時可不必再對交換區寫入。
相關信息
  • PID 進程id
  • USER 進程所有者的用戶名
  • PR 優先級
  • NI 負值表示高優先級,正值表示低優先級
  • VIRT 進程使用的虛擬內存總量,單位kb
  • RES 進程使用的、未被換出的物理內存大小,單位kb
  • SHR 共享內存大小,單位kb
  • S 進程狀態
  • %CPU 使用的CPU百分比
  • %MEM 使用的物理內存百分比
  • TIME+ 使用的CPU時間總計,單位1/100秒
  • COMMAND 命令名
pstree命令
用途:以樹型結構顯示各進程間的關係
常用命令選項:
[[email protected] ~]# pstree -p
init,1
  ├─acpid,2866
  ├─atd,3060
  ├─auditd,2516
  │   ├─python,2518 /sbin/audispd
  │   └─{auditd},2517
  ├─automount,2842
……
pgrep命令
用途:根據特定條件查詢進程PID信息
常用命令選項:
[[email protected] ~]# pgrep "init"
1
[[email protected] ~]# pgrep -l "log"
2538 syslogd
2541 klogd
3221 login
[[email protected] ~]# pgrep -l -u teacher -t tty1
27483 bash
27584 vim
進程的狀態
  • D 無法中斷的休眠狀態(通常 IO 的進程);
  • R 正在運行,在可中斷隊列中;
  • S 處於休眠狀態,靜止狀態;
  • T 停止或被追蹤,暫停執行;
  • W 進入內存交換(從內核2.6開始無效);
  • X 死掉的進程;
  • Z 殭屍進程不存在但暫時無法消除;
  • W: 沒有足夠的記憶體分頁可分配
  • WCHAN 正在等待的進程資源;
  • <: 高優先級進程
  • N: 低優先級進程
  • L: 有記憶體分頁分配並鎖在記憶體內 (即時系統或捱A I/O),即,有些頁被鎖進內存
  • s 進程的領導者(在它之下有子進程);
  • l 多進程的(使用 CLONE_THREAD, 類似 NPTL pthreads);
  • + 位於後臺的進程組;
進程優先級設置
Linux內核的基本任務是調度進程
每個進程受兩個參數影響其調度
優先級(priority):內核控制動態變化
  • 值越小越早被cpu執行
  • 用戶無法直接調整數值大小
niceness:表示進程可被執行的優先級的修正數值 ,可手工修改
  • 與priority有關
  • 優先級有正負之分(-20 -19)
  • 加入nice值後 PRI(新) = PRI(老) + nice
  • root可以設置nice值範圍(-20 - 19)
  • 普通用戶可以設置nice值範圍(0- 19)
nice值越大,優先級越低
用nice命令新的nice(新開啓的進程)
  • 以新的nice來啓動命令
  • nice -10 vi & 設置nice值爲10
  • nice --10 vi & 設置nice值爲-10
用renice命令設置新nice(已經存在的進程)
  • renice 10 15132 設置nice值爲10
  • renice -10 15132 設置nice值爲-10
用top命令修改進程的優先級
  • 先輸入r,然後輸入pid,最後輸入優先級
作業控制
手工啓動
  • 前臺啓動:用戶輸入命令,直接執行程序
  • 後臺啓動:在命令行尾加入「&」符號
[[email protected] ~]# cp /dev/cdrom mycd.iso &
[1] 28454 //後臺作業號爲1,PID號爲28454
jobs命令查看作業
  • +:最新放到後臺的進程
  • - :僅次於最新放到後臺的進程
fg命令
  • 將處於後臺的進程恢復到前臺運行,需指定作業號
  • 不指定作業號,將恢復有「+」標記的進程
[[email protected] ~]# jobs
[1]-   Stopped                 cp /dev/cdrom mycd.iso 
[2]+  Stopped                 top
[[email protected] ~]# fg 1
Ctrl + Z組合鍵
  • 將當前進程掛起,即調入後臺並停止執行
bg命令
  • 將後臺停止的進程,在後臺重新運行
kill 命令
軟中斷信號,簡稱信號。
是進程間通信機制中唯一的異步通信機制,一個進程不必通過任何操作來等待信號的到達,事實上,進程也不知道信號到底什麼時候到達。進程之間可以互相通過系統調用kill發送軟中斷信號。內核也可以因爲內部事件而給進程發送信號,通知進程發生了某個事件。信號機制除了基本通知功能外,還可以傳遞附加信息。
  • kill -l列出Linux系統支持的信號種類
發送信號的原因
  • 硬件異常
  • 軟件狀態
  • 終端中斷
kill命令用來發送信號
  • kill -信號代碼 PID
進程收到信號後採取的行動
  • 終止
  • 忽略信號
  • 掛起
用戶常用的信號
信號值
符號
行爲
2
SIGINT
ctrl+c
9
SIGKILL
請求終止(不能忽略)
15
SIGTERM
請求終止(默認值)
20
SIGTSTP
ctrl+z
kill命令取消後臺作業
  • kill -9 PID
  • kill -9 %作業號
命令
行爲
jobs
列出後臺作業
fg[N]
將後臺作業調到前臺
Ctrl+Z
掛起當前進程,放到後臺停止運行
bg[N]
啓動在後臺掛起的進程
kill %N
終止後臺作業
kill、killall命令
  • kill用於終止指定PID號的進程
  • killall用於終止指定名稱的所有進程
[[email protected] ~]# pgrep -l "portmap"
2869  portmap
[[email protected] ~]# kill  -9  2869
[[email protected] ~]# killall -9 vim
jobs
列出後臺作業
fg[N]
將後臺作業調到前臺
Ctrl+Z
掛起當前進程,放到後臺停止運行
bg[N]
啓動在後臺掛起的進程
kill %N
終止後臺作業
kill、killall命令
  • kill用於終止指定PID號的進程
  • killall用於終止指定名稱的所有進程
[[email protected] ~]# pgrep -l "portmap"
2869  portmap
[[email protected] ~]# kill  -9  2869
[[email protected] ~]# killall -9 vim
[1]-  已殺死               /usr/bin/vim file1
[2]-  已殺死               /usr/bin/vim file2
pkill命令
pkill命令
  • 用途:根據特定條件終止相應的進程
常用命令選項:
  • -u:根據進程所屬的用戶名終止相應進程
  • -t:根據進程所在的終端終止相應進程
       
       
Ctrl+Z
掛起當前進程,放到後臺停止運行
bg[N]
啓動在後臺掛起的進程
kill %N
終止後臺作業
kill、killall命令
  • kill用於終止指定PID號的進程
  • killall用於終止指定名稱的所有進程
[[email protected] ~]# pgrep -l "portmap"
2869  portmap
[[email protected] ~]# kill  -9  2869
[[email protected] ~]# killall -9 vim
[1]-  已殺死               /usr/bin/vim file1
[2]-  已殺死               /usr/bin/vim file2
pkill命令
pkill命令
  • 用途:根據特定條件終止相應的進程
常用命令選項:
  • -u:根據進程所屬的用戶名終止相應進程
  • -t:根據進程所在的終端終止相應進程
[[email protected] ~]# w | grep -v "root" BlinkMacSystemFont, 'PingFang SC', Helvetica, Tahoma, Arial, 'Hiragino Sans GB', 'Microsoft YaHei', '微軟雅黑', SimSun, '宋體', Heiti, '黑體', sans-serif;color:#393939;line-height:1.75;">pkill命令
  • 用途:根據特定條件終止相應的進程
相關文章
相關標籤/搜索