進程的概念
進程是系統進行資源分配的基本單位,當一個應用程序啓動時就向內核發起請求,然後由進程創建出新的進程,此時應用程序就啓動了。創建進程的進程此時被稱作父進程,而被創建出來的進程被稱爲子進程,此外子進程不可脫離父進程而存在,當一個父進程被銷燬時,其子進程也會一併被銷燬。
在Linux中,進程被內核所管理,內核爲每一個進程虛擬處一塊內存空間,所以當進程被調度到內存中執行時,只能看到自己和內核,從而避免進程之間發生衝突,影響其他進程的運行。但是進程獨立並不代表其不能互相通信,當進程之間需要通信時則會發起IPC的機制,而進程之間通信則可分爲同主機之間進程通信和不同主機之間進程通信,同主機之間進程通信時,通常採用發信號、共享內存、互斥鎖等機制進行;不同主機上的進程之間通信則採用套接字和RPC機制進行。
進程的狀態
雖然現在的計算機都是多用戶多任務的計算機,而上文已經說到啓動一個服務時就會由進程啓動另一個子進程,多任務則意味着可同時啓動多個進程,但是站在CPU的角度來說,某一時刻在其之上運行的進程有且只能有一個,而其餘進程則會被內核放置到爲其準備的一段內存之中。所以進程在內存中是有狀態之分的,按照其是否被調入CPU運行可分爲:運行態、睡眠態、就緒態、停止態和僵死態。
進程管理相關命令之查看常用命令:ps、pstree、pgrep
ps:查看當前系統進程
用法 ps [OPTIONS]
-a:查看與終端相關的進程
-x:查看與終端無關的進程
-u:查看與用戶相關的進程
-e:顯示所有進程
-f:顯示豐富格式信息
-H:顯示層級信息,查看進程之間的“父子”關係
-o:用戶自定義顯示信息
例1:使用ps命令查看系統上與用戶相關的進程的詳細信息
[root@test ~]# ps -auf Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 4073 0.0 0.3 108472 1852 pts/0 Ss 07:52 0:00 -bash root 4207 0.0 0.2 110204 1044 pts/0 R+ 08:09 0:00 \_ ps -auf root 2891 0.0 4.7 141220 23628 tty1 Ss+ 06:10 0:01 /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/a root 3177 0.0 0.3 108472 1924 tty2 Ss+ 06:13 0:00 -bash root 2861 0.0 0.1 4064 544 tty6 Ss+ 06:10 0:00 /sbin/mingetty /dev/tty6 root 2859 0.0 0.1 4064 544 tty5 Ss+ 06:10 0:00 /sbin/mingetty /dev/tty5 root 2857 0.0 0.1 4064 540 tty4 Ss+ 06:10 0:00 /sbin/mingetty /dev/tty4 root 2855 0.0 0.1 4064 544 tty3 Ss+ 06:10 0:00 /sbin/mingetty /dev/tty3
pstree:查看當前系統進程,以進程樹形式顯示
用法 pstree [OPTIONS]
-v:顯示版本號
-u:顯示與用戶相關信息
-a:不顯示每個程序的完整指令
例2:使用pstree命令查看當前系統進程樹
[root@test ~]# pstree -h init─┬─NetworkManager─┬─dhclient │ └─{NetworkManager} ├─abrtd ├─acpid ├─atd ├─auditd───{auditd} ├─bluetoothd ├─bonobo-activati───{bonobo-activat} ├─console-kit-dae───63*[{console-kit-da}] ├─crond ├─cupsd ├─2*[dbus-daemon───{dbus-daemon}] ├─dbus-launch ├─devkit-power-da ├─gconfd-2 ├─gdm-binary─┬─gdm-simple-slav─┬─Xorg │ │ ├─gdm-session-wor │ │ ├─gnome-session─┬─at-spi-registry │ │ │ ├─gdm-simple-gree │ │ │ ├─gnome-power-man │ │ │ ├─metacity │ │ │ ├─plymouth-log-vi │ │ │ ├─polkit-gnome-au │ │ │ └─{gnome-session} │ │ └─{gdm-simple-sla} ...後面已省略
pgrep:過濾當前系統進程
用法:pgrep [OPTION] [PID]|[NAME]
-l:同時顯示進程名和PID
例3:顯示當前系統上與ssh服務相關的進程名和PID
[root@test ~]# pgrep -l ssh 2559 sshd 4066 sshd
動態交互式進程管理工具:top,htop,glances
top:以交互式界面查看和管理進程
常用用法: top [-dbn]
-b:以批次顯示,並顯示所有進程的狀態
-d:指定刷新延時時長
-n:後接數字,指定顯示的批次數量
交互式命令:
P:以佔據CPU百分比大小排序
M:以佔據Memory空間大小排序
T:cpu累積佔據時間排序
l:是否顯示uptime行
t:是否顯示進程狀態信息及cpu負載狀態
1:顯示cpu的平均負載
m:是否顯示內存相關信息
q:終止顯示
s:修改刷新時間間隔
k:後接pid,殺死指定進程
例4:查看當前進程並以批次顯示,2秒刷新一次,一共顯示2屏
[root@test ~]# top -b -d 1 -n 2 top - 09:51:03 up 3:41, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 0.1%us, 0.4%sy, 0.0%ni, 98.9%id, 0.5%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 494164k total, 326476k used, 167688k free, 30680k buffers Swap: 1015804k total, 0k used, 1015804k free, 122340k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13 root 20 0 0 0 0 S 5.5 0.0 0:00.19 sync_supers 4744 root 20 0 15032 1100 828 R 1.8 0.2 0:00.02 top 1 root 20 0 19364 1536 1224 S 0.0 0.3 0:01.75 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 後續已省略... top - 09:51:04 up 3:41, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 1.0%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 494164k total, 326492k used, 167672k free, 30680k buffers Swap: 1015804k total, 0k used, 1015804k free, 122340k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4744 root 20 0 15040 1196 916 R 1.9 0.2 0:00.04 top 4066 root 20 0 98.1m 4424 3416 S 1.0 0.9 0:01.38 sshd 1 root 20 0 19364 1536 1224 S 0.0 0.3 0:01.75 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 後續已省略...
top顯示信息總結(以上個實驗爲例):
top - 09:51:04 up 3:41, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 1.0%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 494164k total, 326492k used, 167672k free, 30680k buffers Swap: 1015804k total, 0k used, 1015804k free, 122340k cached
第一行
top-09:51:04:當前時間
up 3:41:總共運行時長
load average:平均負載(後三數字分別表示過去5,10,15分鐘的平均負載)
第二行
task:作業數總計
running:處於運行態的作業數
sleeping:處於睡眠態的作業數
stopped:處於停止態的作業數
zombie:處於僵死態的作業數
第三行
cpus:當前cpu佔用率
sys:cpu用於內核空間進程的佔用率
ni:cpu用於調整nice值所消耗的百分比
id:空閒百分比
wa:等待io所消耗百分比
hi:硬件中斷所佔用百分比
si:處理軟中斷所佔用百分比
st:被虛擬化軟件所佔用的百分比
第四行
Mem:內存總量
#k userd:被使用的內存量
#k free:空閒量
#k 緩衝所使用內存量
第五行
Swap:swap交換分區總量,後續值和第四行一樣,不再贅述
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER:進程所屬用戶
PID:進程號
%CPU:cpu佔用百分比
%MEM:內存佔用百分比
VSZ:虛擬內存集
RSS:常駐內存集
TTY:啓動進程的終端
STAT:進程狀態
START:啓動時間
TIME: 累積佔用CPU時長
htop:和top功能類似,以更直觀的方式顯示和管理進程
常用用法:htop [dus]
選項含義:-d #:指定延時時長爲#妙
-u USERNAME:指定只顯示和USERNAME用戶相關進程
-s COLUMN:指定排序的字段如PID USERNAME等
交互式命令:
u:-->接着選擇用戶,只顯示指定用戶的進程,
s:跟蹤選定進程所發起的系統調用
l:列出選定進程所操作過的文件
t:顯示進程的層級結構
a:可以選擇把選定進程綁定於某CPU
P:使用CPU佔用率作爲排序關鍵字
M:使用內存佔用率作爲排序關鍵字
T:使用累積佔用CPU時長作爲排序關鍵字
F1:幫助
F2:設置相關參數
F3:查找,可指定關鍵字
F4:標記
F5:顯示進程樹
F6:排序依據,可指定排序關鍵字
F7、F8:降低和調高nice值
F9:向指定進程發信號,可指定所發信號
F10:退出
glances:交互式系統性能指標監控工具
用法:glances [OPTION]
選項:
-b:以Byte/s爲單位,顯示網卡設備數據交換數率
-d:不顯示磁盤IO那塊統計數據
-f /PATH/TO/FILE:設置輸出文件的位置及格式
-o:{HTML|CSV}:設定文件的輸出格式
-m:關閉mount功能模塊
-n:關閉網絡功能模塊
-r:關閉進程列表功能模塊
-t #:指定延時時長,默認爲3秒
-1:單獨顯示每顆cpu的相關數據信息
glances還支持C/S模式工作
服務器模式配置
glances -s -B IPADDR
-B:用於指明監聽的本地地址
客戶端模式配置
glancess -c IPADDR
-c:用於連入的服務器地址
例5:配置glances使之工作於C/S架構下
1.配置Server端
[root@dsl-189-172-5-105-dyn yum.repos.d]# glances -s -B 189.172.5.105 Glances server is running on 189.172.5.105:61209
2.配置Client端
[root@dsl-189-172-5-105-dyn ~]# glances -c 189.172.5.105
系統信息統計工具dstat
dstat:全面整合命令vmstat,iostat netstat,nfsstat和ifstat綜合顯示系統信息
用法: dstat [-afv] [options..] [delay [count]]
選項
-c:顯示cpu性能指標相關的統計數據
-d:顯示disk相關的速率數據
-l:顯示平均負載情況
-g:顯示page相關的速率數據
-i(--int):中斷相關的統計數率
-m:內存相關的統計數據
-n:網絡相關的統計數據
-N 接口:只顯示指定網卡接口的相關速率
-p:顯示進程相關的統計數據
-r:指定io相關的
-s:顯示swap的相關數據
-t:顯示時間
-y:顯示系統相關的數據,包括中斷和進程切換
--top-cpu:顯示最佔用cpu的進程
--top-bio:顯示最小號block io的進程
--top-cputime:顯示最消耗cpu時長的
--top-io:顯示最消耗io的進程
--top-mem:顯示最佔用內存的進程
--ipc:顯示用於進程間通信的速率數據
--raw:顯示raw套接字的相關數據
--tcp:顯示tcp套接字的相關數據
--udp:顯示udp相關的套接字數據
--unix:顯示unix統計數據
--socket:顯示上述從raw開始的信息
例6:顯示當前系統cpu、磁盤、內存使用信息
[root@dsl-189-172-5-105-dyn ~]# dstat -c -m -d ----total-cpu-usage---- ------memory-usage----- -dsk/total- usr sys idl wai hiq siq| used buff cach free| read writ 0 1 99 0 0 0| 188M 35.1M 183M 76.2M| 12k 10k 0 0 100 0 0 0| 188M 35.1M 183M 76.2M| 0 0 0 0 100 0 0 0| 188M 35.1M 183M 76.2M| 0 0 0 0 100 0 0 0| 189M 35.1M 183M 76.0M| 0 0 1 1 98 0 0 0| 189M 35.1M 183M 76.0M| 0 0 ^C