引言:在Linux的系统中,进程相关命令是我们掌握 linux 进程必备利器,所以本文就将介绍一些常用的进程相关的命令。
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命令时加上 -d 来指定显示信息更新的时间间隔。在top命令执行后,可以按下按键得到对显示的结果进行排序:
| 按键 | 含义 |
|---|---|
| M | 根据内存使用量来排序 |
| P | 根据CPU占有率来排序 |
| T | 根据进程运行时间的长短来排序 |
| U | 可以根据后面输入的用户名来筛选进程 |
| K | 可以根据后面输入的PID来杀死进程。 |
| q | 退出 |
| h | 获得帮助 |

【备注】top 命令类似于 windows 操作系统上的任务管理器。
jobs 命令用于查看当前终端的所有后台进程。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。常用选项如下:
| 参数 | 含义 |
|---|---|
| -l | 显示进程号 |
| -p | 仅任务对应的显示进程号 |
| -n | 显示任务状态的变化 |
| -r | 仅输出运行状态(running)的任务 |
| -s | 仅输出停止状态(stoped)的任务 |

命令功能: 发送指定的信号到相应进程,常用于用于删除执行中的程序或工作。使用格式:
kill [-signal] pid
signal 是信号值,pid为进程号
示例:kill 9133 中 9133 为应用程序所对应的进程号,没有信号值,默认为 SIGTERM。

kill 常见用法:

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 &
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:服务器课程