Linux_ps aux指令与grep指令配合管理进程

本文深入解析Linux进程的各种状态,包括运行、中断、不可中断、僵死及停止等,并详细介绍ps命令的各种选项及其输出字段含义,如PID、%CPU、%MEM等。此外,还介绍了如何使用ps与grep组合查询特定进程,以及kill命令结束进程的方法。

Linux进程状态

  1. 运行(正在运行或在运行队列中等待)
  2. 中断(休眠中,受阻,在等待某个条件的形成或等待接受到信号)
  3. 不可中断(收到信号不唤醒和不可运行,进程必须等待直到有中断发生)
  4. 僵死(进程已终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放)
  5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps相关指令

ps命令(Process Status)是最基本同时也是非常强大的进程查看命令。

  • ps a 显示现行终端机下的所有程序,包括其他用户的程序。
  • ps -A 显示所有程序。
  • ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
  • ps -e 此参数的效果和指定"A"参数相同。
  • ps e 列出程序时,显示每个程序所使用的环境变量。
  • ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
  • ps -H 显示树状结构,表示程序间的相互关系。
  • ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
  • ps s 采用程序信号的格式显示程序状况。
  • ps S 列出程序时,包括已中断的子程序资料。
  • ps -t <终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
  • ps u   以用户为主的格式来显示程序状况。
  • ps x   显示所有程序,不以终端机来区分。

ps aux | more 指令

这个指令可以显示进程详细的状态。

参数解释:

  • USER:进程的所有者。
  • PID:进程的ID。
  • PPID:父进程。
  • %CPU:进程占用的CPU百分比。
  • %MEM:进程占用的内存百分比。
  • NI:进程的NICE值,数值越大,表示占用的CPU时间越少。
  • VSZ:该进程使用的虚拟内存量(KB)。
  • RSS:该进程占用的固定内存量(KB)。
  • TTY:该进程在哪个终端上运行,若与终端无关,则显示?。若为pts/0等,则表示由网络连接主机进程。
  • WCHAN:查看当前进程是否在运行,若为-表示正在运行。
  • START:该进程被触发启动时间。
  • TIME:该进程实际使用CPU运行的时间。
  • COMMAND:命令的名称和参数。
  • STAT状态位常见的状态字符:
    D 无法中断的休眠状态(通常 IO 的进程);
    R 正在运行可中在队列中可过行的;
    S 处于休眠状态;
    T 停止或被追踪;
    W 进入内存交换 (从内核2.6开始无效);
    X 死掉的进程 (基本很少見);
    Z 僵尸进程;
    < 优先级高的进程
    N 优先级较低的进程
    L 有些页被锁进内存;
    s 进程的领导者(在它之下有子进程);
    l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);+ 位于后台的进程组;

ps aux | grep xxx命令

如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

例如我想要查看Python 的所有进程,可以在终端输入如下命令:

ps aux | grep python

便可以把Python相关的进程全部都打印到终端供我们查看。相关参数和之前的ps aux | more一致。

进程结束命令

我们可以使用kill命令来结束进程。

如下面的指令所示:

kill   PID  //杀掉进程
kill  -9 PID //强制杀死进程
### 如何查找 Java 进程号并使用 `kill` 命令终止进程 #### 查找 Java 进程号 可以通过以下两种常用方法来查找 Linux 系统中的 Java 进程号 (PID): 1. **使用 `ps` 和 `grep` 组合命令** 可以利用 `ps aux | grep java` 来筛选出所有 Java 相关的进程及其对应的 PID[^3]。此命令会返回一系列字段,其中第二列即为所需的 PID。 2. **使用 `pgrep` 或者 `jps` 工具** - 如果系统安装了 JDK,则可以直接使用 `jps` 命令列出当前用户的 Java 应用程序及其对应 PID[^1]。 - 对于更通用的情况,可采用 `pgrep java` ,它能够快速定位到名为 “java”的进程 ID[^2]。 #### 使用 kill 命令停止 Java 进程 一旦获得了目标 Java 进程的 PID 后,就可以通过不同的信号选项向其发送中断请求: 1. 发送默认 SIGTERM 信号 (`kill`) 执行如下指令即可尝试正常关闭指定 PID 的 Java 进程: ```bash kill <PID> ``` 上述操作相当于通知该进程准备安全退出,在收到信号后允许完成必要的清理工作再结束运行[^4]。 2. 若上述方法未能成功终止进程,则需强制杀掉它: ```bash kill -9 <PID> ``` 以下是具体实现的一个完整例子脚本用于自动化这一过程: ```bash #!/bin/bash # 获取Java应用列表及相应PIDs echo "Searching for running Java processes..." JAVAPROCESSES=$(ps aux | grep '[j]ava') if [[ ! -z "$JAVAPROCESSES" ]]; then echo "${JAVAPROCESSES}" read -p "Enter the exact name or partial match of target process:" TARGETNAME # 提取匹配项pid TARGET_PID=$(echo ${JAVAPROCESSES} | awk "/${TARGETNAME}/{print \$2}") if [ $TARGET_PID ];then echo "Attempting graceful shutdown on pid:${TARGET_PID} ..." # 尝试优雅停机 kill ${TARGET_PID} sleep 5 # 验证是否仍然存活 if ps -p ${TARGET_PID} > /dev/null;then echo "Process did not terminate gracefully after signal received." # 强制杀死未响应的服务实例 echo "Forcing termination now!" kill -9 ${TARGET_PID} fi else echo "No matching Java Process found." fi else echo "No active Java Processes detected." fi ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rocky Ding*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值