網(wǎng)教程:Linux 的進(jìn)程管理手段可比 Windows 強(qiáng)大多了,而且所有的進(jìn)程都映射到 /proc 目錄中,我們可以像操作普通文件那樣查看這些進(jìn)程的內(nèi)存數(shù)據(jù)。
~$ ls -l /proc
dr-xr-xr-x 7 root root 0 2009-08-05 16:28 1
... ...
-r--r--r-- 1 root root 0 2009-08-08 22:55 version
-r--r--r-- 1 root root 0 2009-08-08 22:55 version_signature
-r-------- 1 root root 0 2009-08-08 22:55 vmallocinfo
-r--r--r-- 1 root root 0 2009-08-05 16:29 vmstat
-r--r--r-- 1 root root 0 2009-08-08 22:55 zoneinfo
~$ cat /proc/version
Linux version 2.6.28-11-generic (buildd@palmer) (gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4) ) #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009
1. 作業(yè)管理
通過 "&" 將命令放在 "后臺(tái)" 執(zhí)行
~$ nano a.txt & # 后臺(tái)執(zhí)行 nano 編輯器
[1] 12988
[1]+ Stopped nano a.txt
~$ jobs # 查看當(dāng)前所有執(zhí)行的作業(yè)
[1]+ Stopped nano a.txt
~$ fg 1 # 將 1 作業(yè)調(diào)到前臺(tái)執(zhí)行
按 Ctrl + Z 鍵可以將正在執(zhí)行的程序放到后臺(tái)。對(duì)于 "Stopped" 狀態(tài)的后臺(tái)程序,我們可以用 "bg" 讓其在后臺(tái) "Running"。
~$ sleep 1m # 休眠 1 分鐘,并用 Ctrl + Z 讓其在后臺(tái)執(zhí)行。
^Z
[1]+ Stopped sleep 1m
~$ jobs
[1]+ Stopped sleep 1m # sleep 命令被 "掛起"。
~$ bg 1 # 使用 fg 讓 sleep 在后臺(tái)執(zhí)行。
[1]+ sleep 1m &
~$ jobs
[1]+ Running sleep 1m &
我們可以用 "kill" 命令終止作業(yè)。
~$ jobs
[1]+ Stopped sleep 1m
~$ kill -9 %1
[1]+ Stopped sleep 1m
~$ jobs
[1]+ Killed sleep 1m
kill 有幾個(gè)主要的參數(shù): -1 reload; -2 Ctrl + C; -9 強(qiáng)制刪除; -15 以正常方式退出。
2. 進(jìn)程管理
"ps" 用于查看當(dāng)前運(yùn)行的進(jìn)程,參數(shù)很多,不過常用的就是 "aux"。
~$ ps aux | more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 3084 1884 ? Ss 08:00 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S< 08:00 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S< 08:00 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S< 08:00 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 08:00 0:00 [watchdog/0]
root 6 0.0 0.0 0 0 ? S< 08:00 0:00 [events/0]
root 7 0.0 0.0 0 0 ? S< 08:00 0:00 [khelper]
root 8 0.0 0.0 0 0 ? S< 08:00 0:00 [kstop/0]
root 9 0.0 0.0 0 0 ? S< 08:00 0:00 [kintegrityd/0]
root 10 0.0 0.0 0 0 ? S< 08:00 0:00 [kblockd/0]
root 11 0.0 0.0 0 0 ? S< 08:00 0:00 [kacpid]
root 12 0.0 0.0 0 0 ? S< 08:00 0:00 [kacpi_notify]
...
顯示結(jié)果列:
USER: 用戶賬號(hào)
PID: 進(jìn)程編號(hào)
%CPU: CPU 占用百分比
%MEM: 內(nèi)存占用百分比
VSZ: 虛擬內(nèi)存占用量
RSS: 固定內(nèi)存占用
TTY: 終端
STAT: 運(yùn)行狀態(tài) (R: 運(yùn)行; S: 睡眠; T: 終止; Z: 某種原因造成的僵尸進(jìn)程)
START: 啟動(dòng)時(shí)間
TIME: CPU 運(yùn)行時(shí)間
COMMAND: 命令行
我們還可以直接查看單個(gè)進(jìn)程。
~$ ps 34
PID TTY STAT TIME COMMAND
34 ? S< 0:00 [kmpath_handlerd]
~$ ps -C ksnapd
PID TTY TIME CMD
35 ? 00:00:00 ksnapd
和 ps 靜態(tài)輸出不同,"top" 可以動(dòng)態(tài)刷新進(jìn)程信息(默認(rèn)刷新間隔為 5 秒)。
~$ top
top - 12:02:29 up 4:02, 2 users, load average: 0.04, 0.04, 0.01
Tasks: 113 total, 1 running, 111 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.2%us, 1.3%sy, 0.2%ni, 97.6%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 509504k total, 436672k used, 72832k free, 79376k buffers
Swap: 409616k total, 0k used, 409616k free, 212208k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14 root 15 -5 0 0 0 S 1.9 0.0 0:11.08 ata/0
1 root 20 0 3084 1884 564 S 0.0 0.4 0:02.43 init
2 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 15 -5 0 0 0 S 0.0 0.0 0:00.33 ksoftirqd/0
5 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
第一行: 系統(tǒng)已啟動(dòng)時(shí)間; 在線用戶數(shù); 系統(tǒng) 1、5、10 分鐘的負(fù)載 (通常不超過 1,如果持續(xù)大于 5 則需要檢查)。
第二行: 進(jìn)程統(tǒng)計(jì)。zombie 表示僵尸進(jìn)程數(shù)量。
第三行: CPU 負(fù)載統(tǒng)計(jì)。
第四行: 內(nèi)存使用統(tǒng)計(jì)。
第五行: 虛擬內(nèi)存使用統(tǒng)計(jì)。
進(jìn)程列信息:
PID: 進(jìn)程編號(hào)
USER: 用戶賬號(hào)
PR: 優(yōu)先級(jí) (越小越早執(zhí)行)
NI: Nice
%CPU: CPU 占用百分比
%MEM: 內(nèi)存占用百分比
TIME+: CPU 運(yùn)行時(shí)間
COMMAND: 命令行
我們可以用 "-d" 參數(shù)指定刷新頻率 (秒)
~$ top -d 1
"-p" 參數(shù)用于指定某個(gè)具體的進(jìn)程編號(hào)。
~$ top -d 1 -p 13952
運(yùn)行時(shí)可以按 "h" 進(jìn)入幫助菜單,查看顯示和排序等快捷鍵。
3. 進(jìn)程優(yōu)先級(jí)
每個(gè)進(jìn)程都有一個(gè) "優(yōu)先級(jí) (Priority)" 屬性,系統(tǒng)按照優(yōu)先級(jí) (升序)來安排執(zhí)行次序。
PRI (new) = PRI (old) + Nice
由于 PRI 是由系統(tǒng) "動(dòng)態(tài)" 決定的,因此我們要調(diào)整優(yōu)先級(jí),需要通過 Nice 來完成。
~$ nano &
[1] 15174
[1]+ Stopped nano
~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 R 1000 15086 15082 0 80 0 - 1447 - pts/0 00:00:00 bash
0 T 1000 15174 15086 0 80 0 - 929 signal pts/0 00:00:00 nano
0 R 1000 15177 15086 0 80 0 - 635 - pts/0 00:00:00 ps
~$ sudo renice -5 15174 # 調(diào)整優(yōu)先級(jí)
15174: old priority 0, new priority -5
~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 R 1000 15086 15082 0 80 0 - 1447 - pts/0 00:00:00 bash
0 T 1000 15174 15086 0 75 -5 - 929 signal pts/0 00:00:00 nano
0 R 1000 15182 15086 0 80 0 - 635 - pts/0 00:00:00 ps