引言:在Linux的系统中,进程相关命令是我们掌握 linux 进程必备利器,所以本文就将介绍一些常用的进程相关的命令。
文章目录
- 进程查看命令
- ps 查看命令
- top 动态查看命令
- jobs 命令
- 进程控制命令
- kill 命令
- killall 命令
- 前后台进程相关控制命令
进程查看命令
ps 查看命令
ps 命令可以查看进程的详细状况,常用选项(选项可以不加“-”)如下:
选项 | 含义 |
-a | 显示终端上的所有进程,包括其他用户的进程 |
-u | 显示进程的详细状态 |
-x | 显示没有控制终端的进程 |
-w | 显示加宽,以便显示更多的信息 |
-r | 只显示正在运行的进程 |
ps 常见用法:
- ps aux:显示这个操作系统上所有进程的信息,相当于一个拍照,不能动态显示。
- ps -ef:效果与 ps aux 差不多, ps aux 最初用到 Unix Style 中,而 ps -ef 被用在 System V Style 中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
- ps ajx:以比较完整的格式显示所有的进程,会显示进程的父进程 ID、进程组 ID、会话 ID 等
- ps a:显示当前终端下的所有进程,包括其他用户的进程。
- 查找某个进程:根据进程的名字或者其他信息,结合 grep 命令找到目标进程。
【补充】如上图所示,STAT 表示进程状态,具体参数意义如下:
参数 | 含义 |
D | 不可中断 Uninterruptible(usually IO) |
R | 正在运行,或在队列中的进程 |
S(大写) | 处于休眠状态 |
T | 停止或被追踪 |
Z | 僵尸进程 |
W | 进入内存交换(从内核2.6开始无效) |
X | 死掉的进程 |
< | 高优先级 |
N | 低优先级 |
s | 包含子进程 |
+ | 位于前台的进程组 |
top 动态查看命令
top 命令用来动态显示运行中的进程。top 命令能够在运行后,在指定的时间间隔更新显示信息,可以在使用 top命令时加上 -d 来指定显示信息更新的时间间隔。在top命令执行后,可以按下按键得到对显示的结果进行排序:
按键 | 含义 |
M | 根据内存使用量来排序 |
P | 根据CPU占有率来排序 |
T | 根据进程运行时间的长短来排序 |
U | 可以根据后面输入的用户名来筛选进程 |
K | 可以根据后面输入的PID来杀死进程。 |
q | 退出 |
h | 获得帮助 |
【备注】top 命令类似于 windows 操作系统上的任务管理器。
jobs 命令
jobs 命令用于查看当前终端的所有后台进程。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。常用选项如下:
参数 | 含义 |
-l | 显示进程号 |
-p | 仅任务对应的显示进程号 |
-n | 显示任务状态的变化 |
-r | 仅输出运行状态(running)的任务 |
-s | 仅输出停止状态(stoped)的任务 |
进程控制命令
kill 命令
命令功能: 发送指定的信号到相应进程,常用于用于删除执行中的程序或工作。使用格式:
kill [-signal] pid
signal 是信号值,pid为进程号
示例:kill 9133 中 9133 为应用程序所对应的进程号,没有信号值,默认为 SIGTERM。
kill 常见用法:
- kill -l:查看所有信号的编号
- kill -SIGKILL/(-9) 进程号: 有些进程不能直接杀死(如后台进程),这时候我们需要加一个参数“ -9 ”,“ -9 ” 代表强制结束(9号信号为SIGKILL)。
killall 命令
Linux 中每个进程号是唯一的,但是可能存在进程名相同的进程,如下所示:
killall 命令可以根据进程名杀死进程,这样可以杀死所有进程名相同的进程。
前后台进程相关控制命令
Linux下,需要经常使用进程的前后台调度命令,比如一个需要长时间运行的命令,我们就希望把它放入后台,这样就不会阻塞当前的操作;而一些服务型的命令进程我们则希望能把它们长期运行于后台。
- Ctrl + C 组合键:终止并退出前台命令的执行,回到当前终端;
- Ctrl + Z 组合键:暂停前台命令的执行,将该进程放入后台,回到当前终端;
- & 命令:运行命令时,在命令末尾加上 & 可让命令在后台执行。但关闭当前终端导致该后台进程退出;
- nohup 命令:不挂断地运行命令。用来让进程始终在后台执行,即使关闭当前的终端也一样并输出日志,这点 & 命令做不到;
【补充】在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。 - fg N:将任务号为 N 的后台进程放到前台执行;
- bg N:将任务号为 N 的暂停的后台进程,继续执行。
示例 1:
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$ jobs -l # 列出后台进程,无后台进程
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$ ./server # 运行程序
Accepting connections ...
^Z # 执行 ctrl + z,暂停并转为后台
[1]+ Stopped ./server
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$ jobs -l # 列出后台进程,存在后台进程
[1]+ 20743 Stopped ./server
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$ bg 1 # 将暂停的后台进程恢复运行
[1]+ ./server &
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$ fg 1 # 将后台进程转为前台
./server
^C # 执行 ctrl + c 结束进程
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$
示例 2:
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$ jobs -l # 列出后台进程,无后台进程
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$ nohup ./server & # 以非挂起的方式运行程序
[1] 21292
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$ nohup: ignoring input and appending output to 'nohup.out'
yxm@192:~/myshare/NetworkIO/BIO/mul_process_server$ jobs -l # 列出后台进程,无后台进程
[1]+ 21292 Running nohup ./server &