Windows 有任務管理器來管理進程,Linux 也有相應的命令來管理進程。 ...
Windows
有任務管理器來管理進程,Linux
也有相應的命令來管理進程。
查看進程
ps
- 查看靜態的進程統計信息
a
:顯示當前終端下的所有進程信息,包括其他用戶的進程。與x
選項結合時將顯示系統中所有的進程信息。
u
:使用以用戶為主的格式輸出進程信息。
x
:顯示當前用戶在所有終端下的進程信息。
-e
:顯示系統內的所有進程信息。
-l
:使用長(Long)格式顯示進程信息。
-f
:使用完整的(Full)格式顯示進程信息。
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128164 6832 ? Ss 15:50 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 15:50 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 15:50 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 15:50 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 15:50 0:00 [kworker/u256:0]
root 7 0.0 0.0 0 0 ? S 15:50 0:00 [migration/0]
//有很多,不寫。
USER
:啟動該進程的用戶賬號的名稱。
PID
:該進程在系統中的數字ID
號,在當前系統中是唯一的。
%CPU
:CPU
占用的百分比。
%MEM
:記憶體占用的百分比。
VSZ
:占用虛擬記憶體(swap
空間)的大小。
RSS
:占用常駐記憶體(物理記憶體)的大小。
TTY
:表明該進程在哪個終端上運行。?
表示未知或不需要終端。
STAT
:顯示進程當前的狀態,如S可中斷休眠進程
、D不可中斷休眠進程
、R運行
、Z僵死
、<高優先順序
、N低優先順序
、s父進程
、l多線性進程
、+前臺進程
。對處於僵死狀態的進程應該予以手動終止。
START
:啟動該進程的時間。
TIME
:該進程占用的CPU
時間。
COMMAND
:啟動該進程的命令的名稱。
[root@localhost ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 32041 ep_pol 15:50 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
1 S root 2 0 0 80 0 - 0 kthrea 15:50 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo 15:50 ? 00:00:00 [ksoftirqd/0]
1 S root 5 2 0 60 -20 - 0 worker 15:50 ? 00:00:00 [kworker/0:0H]
1 S root 6 2 0 80 0 - 0 worker 15:50 ? 00:00:00 [kworker/u256:0]
1 S root 7 2 0 -40 - - 0 smpboo 15:50 ? 00:00:00 [migration/0]
//有很多,不寫。
PPID
:當前進程的父進程
C
:CPU
占用
PRI
:用戶態的進程優先順序
NI
:內核態的進程優先順序,取值範圍-20~19
,數值越低,優先順序越高。
ADDR
:-
表示正在運行
SZ
:虛擬記憶體swap
占用
WCHAN
:當前進程在內核中的名稱
top
- 查看進程動態信息,每
3s
刷新一次
[root@localhost ~]# top
top - 19:27:16 up 3:36, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 98 total, 1 running, 97 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867024 total, 1348360 free, 148256 used, 370408 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 1525688 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 128164 6832 4064 S 0.0 0.4 0:02.43 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.25 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.59 kworker/u256:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
//有很多,不寫。
Tasks
系統任務信息:total
總進程數,running
正在運行的進程數,sleeping
休眠的進程數,stopped
中止的進程數,zombie
僵死無響應的進程數。
CPU
占用信息:us
用戶占用,sy
內核占用,ni
優先順序調度占用,id
空閑CPU,wa
I/O等待占用,hi
硬體中斷占用,si
軟體中斷占用,st
虛擬化占用。
Mem
記憶體占用信息:total
總記憶體空間,free
空閑記憶體,used
已用記憶體,buff/cache
,物理記憶體和交換記憶體的緩衝區總和。
Swap
交換空間占用:total
總交換空間,free
空閑交換空間,used
已用交換空間,avail Mem
可用物理空間。
pgrep
- 過濾查詢進程信息
-l
:同時輸出對應的進程名,否則只輸出PID
,不便於查看。
-U
:查詢特定用戶的進程
-t
:查詢特定終端運行的進程
[root@localhost ~]# pgrep -l "login"
39654 systemd-logind
[root@localhost ~]# pgrep -l -U root -t tty1
40422 X
pstree
- 查看進程樹
-a
:列出完整的命令信息
-u
:列出對應的用戶名
-p
:列出對應的PID
號
[root@localhost ~]# pstree -aup
systemd,1 --switched-root --system --deserialize 21
├─ModemManager,39616
│ ├─{ModemManager},39631
│ └─{ModemManager},39649
├─NetworkManager,39701 --no-daemon
│ ├─dhclient,39841 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
│ ├─{NetworkManager},39704
│ └─{NetworkManager},39709
//有很多,不寫。
- 不加
u
,以指定用戶作為參數,可查看屬於指定用戶的進程數結構。
[root@localhost ~]# pstree -ap ll
未發現進程。
控制進程
&
- 運行較長時間的操作時,命令後面加
&
符號,放到後臺運行
[root@localhost ~]# dd if=/dev/zero of=~/test.tmp bs=1M count=2048 &
[1] 8773
Ctrl + C
- 終止正在執行的進程
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (183.232.231.174) 56(84) bytes of data.
64 bytes from 183.232.231.174 (183.232.231.174): icmp_seq=1 ttl=128 time=34.6 ms
64 bytes from 183.232.231.174 (183.232.231.174): icmp_seq=2 ttl=128 time=34.9 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 34.660/34.823/34.987/0.248 ms
Ctrl + Z
- 將前臺正在執行的進程調入後臺並暫停執行
[root@localhost ~]# dd if=/dev/zero of=~/data.tmp bs=1M count=2048
^Z
[1]+ Stopped dd if=/dev/zero of=~/data.tmp bs=1M count=2048
jobs
- 查看當前終端在後臺運行的進程任務
-l
:顯示進程對應的PID
號
[root@localhost ~]# jobs -l
[1]+ 8778 Stopped dd if=/dev/zero of=~/data.tmp bs=1M count=2048
bg
- 將後臺中暫停執行的任務恢復運行,並繼續在後臺運行,需指定任務編號作為參數
[root@localhost ~]# bg 1
fg
- 將後臺中的任務恢復到前臺運行,需指定任務編號作為參數
[root@localhost ~]# fg 1
kill
- 通過
PID
終止進程運行,無特定選項時,給程式發送終止信號並正常退出運行
-9
:強制終止
[root@localhost ~]# vi testfile
[1]+ Stopped vi testfile
[root@localhost ~]# jobs -l
[1]+ 8935 Stopped vi testfile
[root@localhost ~]# kill 8935
[root@localhost ~]# jobs -l
[1]+ 8935 Stopped vi testfile
[root@localhost ~]# kill -9 8935
[root@localhost ~]# jobs -l
[1]+ 8935 Killed vi testfile
killall
- 通過進程名終止運行,需要結束多個相同名稱的進程時,killall更方便。
[root@localhost ~]# vi testfile1
[1]+ 已停止 vi testfile1
[root@localhost ~]# vi testfile2
[2]+ 已停止 vi testfile2
[root@localhost ~]# jobs -l
[1]- 1803 停止 vi testfile1
[2]+ 1804 停止 vi testfile2
[root@localhost ~]# killall -9 vi
[1]- 已殺死 vi testfile1
[2]+ 已殺死 vi testfile2
[root@localhost ~]# jobs -l
pkill
- 特定條件終止,與
pgrep
類似
-U
:指定用戶
-t
:指定終端
[root@localhost ~]# pgrep -l -U "ll"
1875 gnome-keyring-d
1893 gnome-session-b
//有很多,不寫
[root@localhost ~]# pkill -9 -U "ll"
[root@localhost ~]# pgrep -l -U "ll"