本節內容
1、進程管理
2、ps
3、uptime
4、top
5、ss -tnl------ lsof -i :22
一、 進程管理的概念
程序:二進制文件,靜態 /bin/date,/usr/sbin/sshd
進程:是程序運行的過程,動態,有生命周期及運行狀態。
下圖所示的是進程的生命周期:

描述如下:
父進程復制自己的地址空間(fork [fɔ:k] 分叉)創建一個新的(子)進程結構。每個新進程分配一個唯一的進程 ID(PID),滿足跟蹤安全性之需。PID 和父進程 ID(PPID)是子進程環境的元素,任何進程都可以創建子進程,所有進程都是第一個系統進程的后代。
centos5或6,PID為1的進程是:init
centos7 PID為1的進程是:systemd
進程類型:
僵屍進程:一個進程使用fork創建子進程,如果子進程退出,而父進程並沒有調用wait或waitpid獲取子進程的狀態信息,那么子進程的進程描述符仍然保存在系統中。這種進程稱之為僵屍進程。
用自己的話表達:父進程退出了,子進程沒有退出,那么這些子進程就沒有父進程來管理了,就變成僵屍進程。
交互進程:是由一個shell啟動的進程。交互進程既可以在前台運行,也可以在后台運行;
批量處理進程:這種進程和終端沒聯系,是個進程序列;
守護進程:在Linux系統啟動時啟動的進程,並在后台運行;
超級守護進程:系統啟動時由一個統一的守護進程xinet來負責管理一些進程,當相應請求到來時需要通過xinet的轉接才可以喚醒被xinet管理的進程。
二、進程的屬性
進程ID(PID):是唯一的數值,用來區分進程
進程狀態:狀態分為運行R(running)、休眠S(sleep)、僵屍Z(zombie)
三、使用ps查看進程工具
1、ps查看進程工具
例1:常用的參數:
a:顯示跟當前終端關聯的所有進程
u:基於用戶的格式顯示(U: 顯示某用戶ID所有的進程)
x:顯示所有進程,不以終端機來區分
另一種ps查看進程的方法:ps -ef (查看內容簡潔)
[root@renyz ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 125568 4080 ? Ss 09:04 0:05 /usr/lib/systemd/syste
root 2 0.0 0.0 0 0 ? S 09:04 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:04 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 09:04 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 09:04 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 09:04 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 09:04 0:01 [rcu_sched]
備注:
最后一列[xxxx] 使用方括號括起來的進程是內核態的進程。沒有括起來的是用戶態進程。
2、上面的參數輸出每列含意
USER:啟動這些進程的用戶
PID:進程的ID
%CPU:進程占用的CPU百分比;
%MEM:占用內存的百分比;
VSZ:進程占用的虛擬內存大小(單位:KB)
RSS:進程占用的物理內存大小(單位:KB)
STAT:該程序目前的狀態,Linux進程有5種基本狀態:
R :該程序目前正在運作,或者是可被運作;
S :該程序目前正在睡眠當中,但可被某些訊號(signal) 喚醒。
T :該程序目前正在偵測或者是停止了;
Z :該程序應該已經終止,但是其父程序卻無法正常的終止他,造成 zombie (疆屍) 程序的狀態
D :不可中斷狀態.
5個基本狀態后,還可以加一些字母,比如:Ss、R+等,它們含意如下:
<:表示進程運行在高優先級上
N:表示進程運行在低優先級上
L:表示進程有頁面鎖定在內存中
s:表示進程是控制進程
l:表示進程是多線程的
+:表示當前進程運行在前台
START:該 process 被觸發啟動的時間;
TIME :該 process 實際使用 CPU 運作的時間。
COMMAND:該程序的實際指令
四、uptime查看系統負載
[root@renyz ~]# uptime
18:33:55 up 9:29, 1 user, load average: 0.00, 0.01, 0.05
彈出消息含意如下:
當前時間 系統運行時間 當前登錄用戶 系統負載1分鍾,5分鍾,15分鍾的平均負載
那么什么是系統平均負載呢? 系統平均負載是指在特定時間間隔內運行隊列中的平均進程數。
如果每個CPU內核的當前活動進程數不大於3的話,那么系統的性能是良好的。如果每個CPU內核的任務數大於5,那么這台機器的性能有嚴重問題。
如果你的linux主機是1個雙核CPU的話,當Load Average 為6的時候說明機器已經被充分使用了。
五、top命令
top - 18:36:39 up 9:31, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 160 total, 2 running, 158 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 995896 total, 75692 free, 392760 used, 527444 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 349284 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125568 4080 2612 S 0.0 0.4 0:05.21 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.75 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 R 0.0 0.0 0:01.44 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
第1行:系統時間、運行時間、登錄終端數、系統負載(三個數值分別為1分鍾、5分鍾、15分鍾內的平均值,數值越小意味着負載越低)。
第2行:進程總數、運行中的進程數、睡眠中的進程數、停止的進程數、僵死的進程數。
第3行:用戶占用資源百分比、系統內核占用資源百分比、改變過優先級的進程資源百分比、空閑的資源百分比等。其中數據均為CPU數據並以百分比格式顯示,例如“97.1 id”意味着有97.1%的CPU處理器資源處於空閑。
第4行:物理內存總量、內存使用量、內存空閑量、作為內核緩存的內存量。
第5行:虛擬內存總量、虛擬內存使用量、虛擬內存空閑量、已被提前加載的內存量。
第6行:
PID — 進程id
USER — 進程所有者
PR — 進程優先級
NI — nice值。負值表示高優先級,正值表示低優先級
VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR — 共享內存大小,單位kb
S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程
%CPU — 上次更新到現在的CPU時間占用百分比
%MEM — 進程使用的物理內存百分比
TIME+ — 進程使用的CPU時間總計,單位1/100秒
COMMAND — 進程名稱(命令名/命令行)
六、lsof命令
lsof命令用於查看你進程打開的文件,打開文件的進程,進程打開的端口(TCP、UDP)
-i<條件>:列出符合條件的進程。(4、6、協議、:端口、 @ip )
[root@renyz ~]# ss -tnl #lsof配合ss命令使用
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 100 ::1:25 :::*
[root@renyz ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 6973 root 3u IPv4 44072 0t0 TCP *:ssh (LISTEN)
sshd 6973 root 4u IPv6 44081 0t0 TCP *:ssh (LISTEN)
