在使用linux的時(shí)候,進(jìn)程管理是必須要掌握的技能,下面從幾個(gè)方面介紹下進(jìn)程管理相關(guān)知識(shí)點(diǎn)。
進(jìn)程分類
- 前臺(tái)進(jìn)程:
該程序運(yùn)行行,就占據(jù)了命令提示符;
- 后臺(tái)進(jìn)程:
啟動(dòng)之后,釋放命令提示符,后續(xù)的操作在后臺(tái)執(zhí)行;
從前臺(tái)到后臺(tái):
當(dāng)使用Ctrl+z 后該進(jìn)程會(huì)放到后臺(tái),并停止運(yùn)行;
如果想讓它在后臺(tái)繼續(xù)運(yùn)行,則可以使用bg命令:
# bg job_id
這個(gè)job_id是使用jobs命令來(lái)查看的。每個(gè)放到后臺(tái)的進(jìn)程都有一個(gè)作業(yè)號(hào)。
[root@ns2 ~]# jobs
[1] + suspended sleep 3600
[root@ns2 ~]#
作業(yè)號(hào):
+:有+號(hào)的表示命令默認(rèn)操作的作業(yè);
-:有-號(hào)的表示命令將第二個(gè)執(zhí)行的操作;
把后臺(tái)的進(jìn)程拿到前臺(tái)來(lái)執(zhí)行:
# fg job_id
終止某個(gè)作業(yè):
# kill %job_id //注意這里的這個(gè)%一定不能省;
進(jìn)程狀態(tài)
D:不可中斷的睡眠,通常是I/0操作;
R:運(yùn)行或就緒,在運(yùn)行隊(duì)列上;
S:可中斷的睡眠,(等待一個(gè)事件的結(jié)束)
T:停止
Z:僵死
<:高優(yōu)先級(jí)進(jìn)程
N:低優(yōu)先級(jí)進(jìn)程
+:前臺(tái)進(jìn)程組中的進(jìn)程(和終端相關(guān)的)
l:多線程進(jìn)程
s:會(huì)話進(jìn)程首進(jìn)程
PS命令
ps - report a snapshot of the current processes 給當(dāng)前進(jìn)程生成一個(gè)快照;可以理解成process status
ps命令支持兩種不同風(fēng)格的參數(shù),BSD和UNIX;
- BSD風(fēng)格:不加-
[root@ns2 ~]# ps aux|head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 10368 668 ? Ss 10:26 0:01 init [3]
root 2 0.0 0.0 0 0 ? S< 10:26 0:00 [migration/0]
root 3 0.0 0.0 0 0 ? SN 10:26 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S< 10:26 0:18 [events/0]
root 5 0.0 0.0 0 0 ? S< 10:26 0:00 [khelper]
root 10 0.0 0.0 0 0 ? S< 10:26 0:00 [kthread]
root 14 0.0 0.0 0 0 ? S< 10:26 0:00 [kblockd/0]
root 15 0.0 0.0 0 0 ? S< 10:26 0:00 [kacpid]
root 186 0.0 0.0 0 0 ? S< 10:26 0:00 [cqueue/0]
[root@ns2 ~]#
USER:表示運(yùn)行此進(jìn)程的用戶
PID:表示此進(jìn)程的進(jìn)程號(hào)
%CPU:表示此進(jìn)程占用CPU的百分比
%MEM:表示此進(jìn)程占用內(nèi)存的百分比
VSZ:此進(jìn)程占用的虛擬內(nèi)存大小,單位KB
virtual memory size of the process in KiB (1024-byte units). Device mAppings are currently excluded; this is subject to change.
RSS:此進(jìn)程占用常住內(nèi)存大小,不包括swapped的大小,也就是物理內(nèi)存的大小,單位KB
resident set size, the non-swapped physical memory that a task has used (in kiloBytes).
TTY:表示此進(jìn)程所屬的終端,?表示不屬于任何終端;
STAT:該進(jìn)程的狀態(tài);
START:表示此進(jìn)程的啟動(dòng)時(shí)間,
TIME 占用CPU的累積時(shí)長(zhǎng);
accumulated cpu time, user + system. The display format is usually "MMM:SS", but can be shifted to the right if the process used more than 999 minutes of cpu time.
COMMAND:是哪個(gè)命令啟動(dòng)的該進(jìn)程,如果命令是被[]包起來(lái)的,則表示是內(nèi)核進(jìn)程;
- UNIX風(fēng)格:必須加-
例如:ps -elf
-e Select all processes. Identical to -A 顯示所有的進(jìn)程,和-A選項(xiàng)是一樣的,所以也可以寫在:ps -Alf
-l long format. The -y option is often useful with this. 使用長(zhǎng)行格式顯示,
-f does full-format listing. This option can be combined with many other UNIX-style options to add additional columns.就是說(shuō)使用比較全的格式來(lái)顯示,這樣可以顯示更多的信息;
[root@ns2 ~]# ps -elf|head
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 75 0 - 2592 - 10:26 ? 00:00:01 init [3]
1 S root 2 1 0 -40 - - 0 migrat 10:26 ? 00:00:00 [migration/0]
1 S root 3 1 0 94 19 - 0 ksofti 10:26 ? 00:00:00 [ksoftirqd/0]
1 S root 4 1 0 70 -5 - 0 worker 10:26 ? 00:00:19 [events/0]
1 S root 5 1 0 70 -5 - 0 worker 10:26 ? 00:00:00 [khelper]
5 S root 10 1 0 74 -5 - 0 worker 10:26 ? 00:00:00 [kthread]
1 S root 14 10 0 70 -5 - 0 worker 10:26 ? 00:00:00 [kblockd/0]
1 S root 15 10 0 80 -5 - 0 worker 10:26 ? 00:00:00 [kacpid]
1 S root 186 10 0 77 -5 - 0 worker 10:26 ? 00:00:00 [cqueue/0]
[root@ns2 ~]#
-U|u :顯示屬于指定的用戶名或用戶UID的進(jìn)程。-u:表示的是有效的UID,比如:當(dāng)Jack用戶正在執(zhí)行passwd在修改自己的密碼,那么此時(shí),用pgrep -u jack passwd并不能看到,因?yàn)閜asswd是有SUID的,此時(shí)該進(jìn)程的執(zhí)行者已經(jīng)是root了。如果使用-U就可以顯示出jack;
-o 用戶可以定義要顯示的字段:ppid,pid,cmd,stat等
pgrep命令
pgrep patten
查找能夠匹配pattern的進(jìn)程的進(jìn)程號(hào)
pgrep -u|U root pattern
查找屬于root用戶的進(jìn)程,并且能夠匹配pattern的進(jìn)程的進(jìn)程號(hào). -u和-U的區(qū)別上ps的是一樣的;
[root@ns2 ~]# pgrep bash
5822
6126
6345
[root@ns2 ~]# pgrep -u root bash
5822
6126
[root@ns2 ~]#
pstree命令:
pstree 以樹(shù)狀結(jié)構(gòu)來(lái)顯示進(jìn)程信息;
top命令:
以動(dòng)態(tài)的方式顯示系統(tǒng)中的進(jìn)程的相關(guān)信息:
[root@ns2 ~]# top -n 1
top - 23:49:36 up 13:23, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.4%id, 0.2%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 507528k total, 424776k used, 82752k free, 43412k buffers
Swap: 1052248k total, 0k used, 1052248k free, 198940k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 15 0 10368 668 564 S 0.0 0.1 0:01.10 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
%wa wait 等待I/0所占用CPU時(shí)間的百分比;
%hi Hard Interruption CPU的硬中斷;
%si Soft Interruption CPU的軟中斷;
%st 指的是被偷走的CPU的時(shí)間;
VIRT 表示虛擬內(nèi)存swap的使用量,單位是KB;
RES 表示的是物理內(nèi)存的使用量,單位是KB;
SHR 表示的是占用共享內(nèi)存的大小,單位是KB。因?yàn)長(zhǎng)INUX系統(tǒng)中有一個(gè)庫(kù)是共享的,所以在內(nèi)存中也是以共享內(nèi)存的方式提供的,這樣就避免了每個(gè)進(jìn)程都要單獨(dú)分一點(diǎn)內(nèi)存來(lái)使用相同的庫(kù)。
TIME+ 真正占用CPU的時(shí)間;
top中的交互命令:
1(數(shù)字):如果服務(wù)器有多個(gè)CPU,那當(dāng)按1后,就會(huì)顯示每個(gè)CPU的負(fù)載情況;
M:按物理內(nèi)存的占用來(lái)排序;
P:按CPU占用來(lái)排序;
T:按占用CPU的時(shí)間來(lái)排序;
l (小寫L):是否顯示平均負(fù)載和啟動(dòng)時(shí)間那一行;
t:是否顯示Tasks和CPU(s)狀態(tài)那一行信息;
m:是否顯示內(nèi)存和SWAP使用情況的那兩行;
c:是否顯示完整的命令信息;
q:退出top
k:終止指定的進(jìn)程,按下k后,會(huì)讓用戶輸入一個(gè)進(jìn)程的pid
> 表示向后翻頁(yè);
< 向前翻頁(yè);
-d number 表示讓top刷新的時(shí)間;
-b 讓top以一批一批地來(lái)顯示;也就是一次顯示全部進(jìn)程的相關(guān)信息;
-n number 當(dāng)top工作在批模式下時(shí),-n表示讓top顯示多少批;
進(jìn)程間通信的方式
1、共享內(nèi)存:一個(gè)進(jìn)程在這塊共享內(nèi)存中寫入數(shù)據(jù),另一個(gè)進(jìn)程再去讀這個(gè)數(shù)據(jù);
2、使用信號(hào);
3、使用semaphore
Linux中的信號(hào)種類:
查看當(dāng)前系統(tǒng)中支持的信息有哪些,可以使用kill -l命令:
[root@ns2 ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@ns2 ~]#
其中幾個(gè)最重要的是:
1:SIGHUP 讓一個(gè)里程不用重啟,就可以重新讀取其配置文件,并讓新的配置文件生效;
2:SIGINT 中斷一個(gè)進(jìn)程,和Ctrl+c的作用一樣;
9:SIGKILL 殺死一個(gè)進(jìn)程,直接關(guān)閉,不論是不是有打開(kāi)的文件或是提供的服務(wù);
15:SIGTERM 終止一個(gè)進(jìn)程,如果該進(jìn)程有打開(kāi)的文件或是正在提供服務(wù)等,會(huì)等它這些操作都完成后,再關(guān)閉;(kill 的默認(rèn)信號(hào))
指定一個(gè)信號(hào) :
- 使用信號(hào)號(hào)碼:kill -1|2|9|15
- 使用信號(hào)名稱:kill -SIGKILL
- 使用信號(hào)簡(jiǎn)寫:kill -KILL
kill的用法:
# kill -9 pid
還有一個(gè)命令是killall,也可以和kill一樣接受信號(hào),只是killall后面接的是進(jìn)程名稱;
# killall [-9] httpd
調(diào)整進(jìn)程的NICE值:
進(jìn)程的nice命令代表的是進(jìn)程的優(yōu)先級(jí):范圍是-20~19,數(shù)字越小,優(yōu)先級(jí)越高;
- 對(duì)于已經(jīng)在運(yùn)行的進(jìn)程,那么可以使用renice命令
# renice 18 33098 //后面接的是進(jìn)程的PID
- 對(duì)于還沒(méi)有運(yùn)行的程序,可以在其運(yùn)行的時(shí)候使用nice來(lái)指定
# nice -n 10 tar zcf test.tgz /tmp
vmstat命令
vmstat 查看系統(tǒng)狀態(tài)信息:
[root@ns2 ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 96616 53252 190240 0 0 63 9 1023 48 0 1 98 1 0
0 0 0 96616 53252 190240 0 0 0 0 1020 47 0 0 100 0 0
0 0 0 96616 53252 190264 0 0 0 0 994 28 0 0 100 0 0
0 0 0 96616 53252 190264 0 0 0 0 1010 48 0 2 98 0 0
0 0 0 96616 53252 190264 0 0 0 0 989 28 0 0 100 0 0
[root@ns2 ~]#
- procs:表示進(jìn)程相關(guān)信息:
r:表示正在運(yùn)行的進(jìn)程隊(duì)列長(zhǎng)度;running
b:表示進(jìn)程阻塞的隊(duì)列長(zhǎng)度; blocked
memory:表示和內(nèi)存相關(guān)的信息:
swpd:表示內(nèi)存中有多少個(gè)頁(yè)面被交換到了交換分區(qū);
free:空閑的內(nèi)存頁(yè)面數(shù)量;
buff:緩沖使用的頁(yè)面數(shù)量;
cache:緩存使用的頁(yè)面數(shù)量;
swap:顯示和交換分區(qū)相關(guān)的信息:
si:有多個(gè)個(gè)內(nèi)存頁(yè)面被交換到了交換分區(qū);
so:有多個(gè)交換分區(qū)的頁(yè)面被交換到了內(nèi)存;
io:和硬盤I/O相關(guān):
bi:有多少個(gè)硬盤塊被放到內(nèi)存中;block in 這些方向都是相對(duì)于內(nèi)存來(lái)說(shuō)的
bo:有多少個(gè)硬盤塊從內(nèi)存同步到了硬盤中;block out
- system和系統(tǒng)相關(guān):
in:表示有多少個(gè)中斷;Interruption
cs:表示有多少次的上下文切換;也就是進(jìn)程的輪換的到CPU上去執(zhí)行一段時(shí)間; context switch
- CPU 和CPU相關(guān)的信息:
us:用戶空間占用的百分比;
sy:內(nèi)核空間占用的百分比;
id:系統(tǒng)空間百分比;
wa:等待I/O占用的百分比;
st:CPU被偷走的時(shí)間;