我想杀掉整个流程树。使用任何通用脚本语言来实现这一点的最佳方法是什么?我正在寻找一个简单的解决方案。
发布于 2008-12-24 20:06:03
您不会说您想要终止的树是否是单个进程组。(如果树是从服务器启动或shell命令行派生的结果,则通常会出现这种情况。)您可以使用GNU ps发现进程组,如下所示:
ps x -o "%p %r %y %x %c "如果它是您想要杀死的进程组,只需使用kill(1)命令,而不是给它一个进程号,而不是给它一个组号的负值。例如,要杀死组5112中的每个进程,请使用kill -TERM -- -5112。
发布于 2011-06-26 08:16:08
pkill -TERM -P 27888这将杀死父进程ID为27888的所有进程。
或更健壮:
CPIDS=$(pgrep -P 27888); (sleep 33 && kill -KILL $CPIDS &); kill -TERM $CPIDS它计划在33秒后终止进程,并礼貌地要求进程终止。
有关终止所有子体的信息,请参见this answer。
发布于 2010-07-09 16:57:02
要递归终止进程树,请使用kill tree ():
#!/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 $@https://stackoverflow.com/questions/392022
复制相似问题