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"