首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向进程组的所有成员发送信号的最佳方式是什么?

向进程组的所有成员发送信号的最佳方式是什么?
EN

Stack Overflow用户
提问于 2008-12-25 02:48:00
回答 33查看 403.4K关注 0票数 440

我想杀掉整个流程树。使用任何通用脚本语言来实现这一点的最佳方法是什么?我正在寻找一个简单的解决方案。

EN

回答 33

Stack Overflow用户

回答已采纳

发布于 2008-12-24 20:06:03

您不会说您想要终止的树是否是单个进程组。(如果树是从服务器启动或shell命令行派生的结果,则通常会出现这种情况。)您可以使用GNU ps发现进程组,如下所示:

代码语言:javascript
复制
 ps x -o  "%p %r %y %x %c "

如果它是您想要杀死的进程组,只需使用kill(1)命令,而不是给它一个进程号,而不是给它一个组号的负值。例如,要杀死组5112中的每个进程,请使用kill -TERM -- -5112

票数 320
EN

Stack Overflow用户

发布于 2011-06-26 08:16:08

代码语言:javascript
复制
pkill -TERM -P 27888

这将杀死父进程ID为27888的所有进程。

或更健壮:

代码语言:javascript
复制
CPIDS=$(pgrep -P 27888); (sleep 33 && kill -KILL $CPIDS &); kill -TERM $CPIDS

它计划在33秒后终止进程,并礼貌地要求进程终止。

有关终止所有子体的信息,请参见this answer

票数 169
EN

Stack Overflow用户

发布于 2010-07-09 16:57:02

要递归终止进程树,请使用kill tree ():

代码语言:javascript
复制
#!/bin/bash

killtree() {
    local _pid=$1
    local _sig=${2:--TERM}
    kill -stop ${_pid} # needed to stop quickly forking parent from producing children between child killing and parent killing
    for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
        killtree ${_child} ${_sig}
    done
    kill -${_sig} ${_pid}
}

if [ $# -eq 0 -o $# -gt 2 ]; then
    echo "Usage: $(basename $0) <pid> [signal]"
    exit 1
fi

killtree $@
票数 104
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/392022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档