You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS环境bash脚本中如何提取指定父PID的子PID生成空格分隔列表

CentOS环境下基于指定父PID杀死所有子进程的实现方案

方案1:pgrep -P 递归提取(最稳定,无误杀风险)

pgrep的-P参数可以直接筛选指定父PID的所有直属子进程,完全基于PID匹配,不会出现名称误杀问题,脚本内运行表现和命令行完全一致,不存在失效问题。
示例脚本如下,适配你需要提取2288及其所有子PID的场景:

#!/bin/bash
# 填写你的父PID
TARGET_PPID=2288

# 递归获取所有后代进程PID
list_all_child_pids() {
    local current_pids=$(pgrep -P $1)
    for pid in $current_pids; do
        echo $pid
        list_all_child_pids $pid
    done
}

# 收集所有需要杀死的PID(包含父进程本身)
KILL_LIST="$TARGET_PPID $(list_all_child_pids $TARGET_PPID)"

# 输出空格分隔的PID列表,可直接用于kill命令
echo "待杀死PID列表:$KILL_LIST"

# 确认列表无误后取消下方注释执行杀死
# kill $KILL_LIST
# 进程无响应时改用强制杀死
# kill -9 $KILL_LIST

方案2:pstree 直接提取(单行命令实现)

你之前用pstree提取失效是因为全局扫描后grep匹配容易命中无关内容,直接将父PID作为pstree的参数限定范围后,提取逻辑会非常稳定,单行命令即可生成空格分隔的PID列表:

pstree -p 2288 | grep -oE '\([0-9]+\)' | grep -oE '[0-9]+' | tr '\n' ' '

该命令会直接输出2288及其所有子PID的空格分隔列表,可直接传递给kill命令使用。

注意事项

  • 执行杀死操作前务必先打印PID列表确认范围,避免误操作
  • 优先发送TERM信号(默认kill不带参数)让进程正常退出,无响应再使用kill -9强制杀死
  • 操作非当前用户启动的进程需要root权限

内容的提问来源于stack exchange,提问作者lazyone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:54:00