进程管理
- 一、查看控制进程
-
-
- 1、ps查看静态进程统计信息(Processes Statistic)
- 2、top查看进程动态信息
- 3、pgrep查询进程信息
- 4、pstree查看进程树、
-
- 二、进程控制
-
-
- 1、启动以及改变运行进程方式
-
-
- 1)手动启动进程方式
- 2)调度启动进程方式
- 3)改变进程的运行方式(Ctrl+Z)
- 4)查看后台的进程(jobs)
- 5)将后台的进程恢复运行(fg)
-
- 2、终止执行进程(kill、killall 和 pkill)
-
-
- 1)使用 kill 命令终止进程
- 2)使用 killall 命令终止进程
- 3)使用 pkill 命令终止进程
-
-
一、查看控制进程
程序是保存在外部存储介质(如硬盘)中的可执行机器代码和数据的静态集合,而进程 是在 CPU 及内存中处于动态执行状态的计算机程序。在 Linux 操作系统中,每个程序启动后可以创建一个或多个进程。
1、ps查看静态进程统计信息(Processes Statistic)
ps 命令是 Linux 操作系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照。
ps 命令常用选项
选项 | 注释 |
---|---|
a | 显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显 示系统中所有的进程信息。 |
u | 使用以用户为主的格式输出进程信息。 |
x | 显示当前用户在所有终端下的进程信息。 |
-e | 显示系统内的所有进程信息。 |
-l | 使用长(Long)格式显示进程信息。 |
-f | 使用完整的(Full)格式显示进程信息。 |
**注:**ps 命令中常用的几个选项,有一部分选项是不带“-”前缀的(添加“-”前缀后含义可能会有出入)。习惯上将上述选项组合在一起使用,执行“ps aux”或“ps -elf”命令。
[[email protected] ~]# ps
PID TTY TIME CMD
18695 pts/0 00:00:00 bash
18804 pts/0 00:00:00 ps
//直接执行不带任何选项的 ps 命令时,将只显示当前用户会话中打开的进程
[[email protected] ~]# ps aux //以简单列表的形式显示出系统进程信息
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 191044 4128 ? Ss 02:46 0:02 /usr/lib/systemd/systemd --
root 2 0.0 0.0 0 0 ? S 02:46 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 02:46 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 02:46 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 02:46 0:01 [kworker/u256:0]
root 7 0.0 0.0 0 0 ? S 02:46 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 02:46 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 02:46 0:02 [rcu_sched]
··········
- USER:启动该进程的用户账号的名称。
- PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的。
- %CPU:CPU 占用的百分比。
- %MEM:内存占用的百分比。
- VSZ:占用虚拟内存(swap 空间)的大小。
- RSS:占用常驻内存(物理内存)的大小。
- TTY:表明该进程在哪个终端上运行。“?”表示未知或不需要终端。
- STAT:显示进程当前的状态,如 S(休眠)、R(运行)、Z(僵死)、<(高优先级)、N(低优先级)、s(父进程)、+(前台进程)。对处于僵死状态的进程应该予以手动终止。
- START:启动该进程的时间。
- TIME:该进程占用的 CPU 时间。
- COMMAND:启动该进程的命令的名称。
[[email protected] ~]# 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 - 47761 ep_pol 02:46 ? 00:00:02 /usr/lib/systemd
1 S root 2 0 0 80 0 - 0 kthrea 02:46 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo 02:46 ? 00:00:00 [ksoftirqd/0]
1 S root 5 2 0 60 -20 - 0 worker 02:46 ? 00:00:00 [kworker/0:0H]
1 S root 6 2 0 80 0 - 0 worker 02:46 ? 00:00:01 [kworker/u256:0]
1 S root 7 2 0 -40 - - 0 smpboo 02:46 ? 00:00:00 [migration/0]
1 S root 8 2 0 80 0 - 0 rcu_gp 02:46 ? 00:00:00 [rcu_bh]
1 S root 9 2 0 80 0 - 0 rcu_gp 02:46 ? 00:00:02 [rcu_sched]
5 S root 10 2 0 -40 - - 0 smpboo 02:46 ? 00:00:00 [watchdog/0]
// PPID 列(表示对应进程的父进程的 PID 号)
2、top查看进程动态信息
使用 ps 命令查看到的是一个静态的进程信息,并不能连续地反馈出当前进程的运行状态。若希望以动态刷新的方式显示各进程的状态信息,可以使用 top 命令。top 命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括 CPU、内存等系统资源占用情况,默认情况下每三秒钟刷新一次,其作用基本类似于Windows 操作系统中的任务管理器。
[[email protected] ~]# top
top - 23:21:33 up 20:35, 2 users, load average: 0.08, 0.03, 0.05
Tasks: 211 total, 1 running, 210 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3865308 total, 1219320 free, 862384 used, 1783604 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 2687068 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 191044 4128 2516 S 0.0 0.1 0:02.51 systemd
···················
系统任务(Tasks)信息 | CPU 占用信息 | 内存占用(Mem)信息 | 交换空间(Swap)占用 |
---|---|---|---|
total,总进程数 | us,用户占用 | total,总内存空间 | buff/cache,物理内存和交换内存的缓冲区总和 |
running,正在运行的进程数 | sy,内核占用 | free,空闲内存 | free,空闲交换空间 |
sleeping, 休眠的进程数 | ni,优先级调度占用 | used,已用内存 | used,已用交换空间 |
stopped,中止的进程数 | id,空闲CPU% | buff/cache,物理内存和交换内存的缓冲区总和 | avail Mem,可用物理空间 |
zombie,僵死无响应的进程数 | wa,I/O 等待占用 | ||
hi,硬件中断占用 | |||
si,软件中断占用 | |||
st,虚拟化占用 |
top 命令的全屏操作界面
- 按 P 键根据 CPU 占用情况对进程列表进行排序
- 按 M 键根据内存占用情况进行排序
- 按 N 键根据启动时间进行排序
- 按 h 键可以获得 top 程序的在线帮助信息
- 按q 键可以正常地退出 top 程序
按top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程。
3、pgrep查询进程信息
[[email protected] ~]# pgrep -l ssh
1024 sshd
2853 ssh-agent
18693 sshd
[[email protected] ~]# pgrep -l -U root -t pts/0
18695 bash
- “-l”选项可同时输出对应的进程名(否则只输出 PID 号,不便于理解)
- “-U”选项查询特定用户的进程
- “-t”选项查询在特定终端运行的进程
4、pstree查看进程树、
- pstree 命令可以输出 Linux 操作系统中各进程的树形结构,以更加直观地判断各进程之间的相互关系(父进程、子进程)。
[[email protected] ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─2*[abrt-watch-log]
············
[[email protected] ~]# pstree -aup
systemd,1 --system --deserialize 13
├─ModemManager,752
│ ├─{ModemManager},770
│ └─{ModemManager},779
├─NetworkManager,6600 --no-daemon
··············
[[email protected] ~]# pstree -ap wu
bash,19406
“-p” 选项使用时可以同时列出对应的 PID 号
“-u”选项可以列出对应的用户名
“-a”选项可以列出完整的命令信息
二、进程控制
1、启动以及改变运行进程方式
1)手动启动进程方式
前台启动进程:用户手工输入命令或者可执行程序的路径,启动的进程
启动后台进程:需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。
2)调度启动进程方式
进程的调度启动可以通过 at、crontab 命令进行设置,调度启动的计划任务进程均在后台运行,不会占用用户的命令终端。
3)改变进程的运行方式(Ctrl+Z)
挂起当前的进程
- 当 Linux 操作系统中的命令正在前台执行时(运行尚未结束),按 Ctrl+Z 组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时用。
4)查看后台的进程(jobs)
-
需要查看当前终端中在后台运行的进程任务时,可以使用 jobs 命令,结合“-l”选项可以同时显示该进程对应的 PID 号。在 jobs 命令的输出结果中,每一行记录对应一个后台进程的状态信息,行首的数字表示该进程在后台的任务编号。若当前终端没有后台进程,将不会显示任何信息。
[[email protected] ~]# jobs -l
5)将后台的进程恢复运行(fg)
- 使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作
- 使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行
-
除非后台中的任务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作为参数。
[[email protected] ~]# fg 1
2、终止执行进程(kill、killall 和 pkill)
1)使用 kill 命令终止进程
通过 kill 命令终止进程时,需要使用进程的 PID 号作为参数。无特定选项时,kill 命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9” 选项强行终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用“-9”选项。
[[email protected] ~]# pgrep -l "sshd" //查询目标进程的PID 号
5822 sshd
[[email protected] ~]# kill 5822 //终止指定PID 的进程
[[email protected] ~]# pgrep -l "sshd" //确认进程已终止(查询时无结果)
[[email protected] ~]# vim file //打开vim 程序并挂起作为测试
[1]+ Stopped vim file
[[email protected] ~]# jobs -l //查询目标进程的PID 号
[1]+ 7095 Stopped vim file
[[email protected] ~]# kill 7095 //尝试正常结束进程
[[email protected] ~]# jobs -l //但发现vim 进程并未退出
[1]+ 7095 Stopped vim file
[[email protected] ~]# kill -9 7095 //强制终止目标进程
[[email protected] ~]# jobs -l //成功终止vim 进程
[1]+ 2993 已 杀死 vim file
2)使用 killall 命令终止进程
- killall 命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 killall 命令将更加方便,效率更高。
[[email protected] ~]# vim file1 //挂起第 1 个 vim 测试进程
[1]+ Stopped vim file1
[[email protected] ~]# vim file2 //挂起第 2 个 vim 测试进程
[2]+ Stopped vim file2
[[email protected] ~]# jobs -l //确认待终止的进程信息
[1]- 7144 Stopped vim file1
[2]+ 7153 Stopped vim file2
[[email protected] ~]# killall -9 vim //通过进程名终止多个进程
[[email protected] ~]# jobs -l
[1]- 7144 Killed vim file1
[2]+ 7153 Killed vim file2
3)使用 pkill 命令终止进程
- 使用 pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,“-U”(指定用户)、“-t”(指定终端)
[[email protected] ~]# pgrep –l -U "wlm" //确认目标进程相关信息
3773 bash
[[email protected] ~]# pkill -9 -U "wlm" //强行终止用户hackli 的进程
[[email protected] ~]# pgrep -l -U "wlm" //确认目标进程已被终止