如何杀死Bash中的子进程?
问题描述:
我试图做一个操作,在linux尝试使用OpenSSL的速度如何杀死Bash中的子进程?
这是来自Netflix的猿猴军队我的代码烧CPU
#!/bin/bash
# Script for BurnCpu Chaos Monkey
cat <<EOF> /tmp/infiniteburn.sh
#!/bin/bash
while true;
do openssl speed;
done
EOF
# 32 parallel 100% CPU tasks should hit even the biggest EC2 instances
for i in {1..32}
do
nohup /bin/bash /tmp/infiniteburn.sh &
done
所以这是Netflix的猿军队代码做烧CPU,这执行正常,但问题是我不能杀死所有32个进程,我什么都试过
pkill -f pid/process name
killall -9 pid/process name
etc.,
唯一的成功之路是我杀了这个过程是经由用户
杀死它pkill -u username
如何在不使用用户名的情况下杀死这些进程?
任何帮助是极大的赞赏
答
终于,我找到了解决我自己的问题,
kill -- -$(ps -o pgid= $PID | grep -o [0-9]*)
其中PID是任何运行,这工作得很好,但我乐于听到任何其他一个进程的进程ID可用选项
来源:http://fibrevillage.com/sysadmin/237-ways-to-kill-parent-and-child-processes-in-one-command
答
终止进程不会自动杀其子。杀死你的bash脚本不会中止openssl speed
进程。
你可以用你的kill
来打一个更宽的网络,这就是你用pkill -u
所做的。或者您可以在脚本中使用trap
并添加错误处理程序。
cleanup() {
# kill children
}
trap cleanup EXIT
+0
你可以投一个更广泛的网络与你的杀死电话?你能否提供更多关于这方面的信息, –
您是否试过'kill -9 pid'? –
是的,我试过没有运气 –
可能相关/可能是一个重复:[杀死所有子进程的最佳途径](http://stackoverflow.com/q/392022)。密切相关的是[如何杀死shell的所有子进程?](http://stackoverflow.com/q/2618403/)有更多Bash经验的人,那么我理解这些微妙的东西就必须做出决定。 – jww