如何在Bash中结束子进程?

4

我正在尝试在Linux系统中执行操作,使用openssl speed来测试CPU性能。

以下是来自Netflix Simian Army的代码:

#!/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 -9 pid 吗? - Eli Sadoff
是的,我尝试过了,但没有成功。 - Coding Ninja
可能相关/可能是重复:最佳方法杀死所有子进程。密切相关的是如何杀死shell的所有子进程? 有更多Bash经验并理解细微差别的人将不得不决定。 - jww
3个回答

4

3
杀死一个进程不会自动杀死它的子进程。杀死你的bash脚本不会杀死openssl speed进程。
您可以通过调用更广泛的kill来解决这个问题,这就是您使用pkill -u所做的。或者您可以在脚本中使用trap并添加错误处理程序。
cleanup() {
    # kill children
}

trap cleanup EXIT

你可以通过kill调用扩大范围,您能否提供更多信息? - Coding Ninja

0

我曾经遇到过类似的问题和解决方案,需要在一定时间后关闭NodeJS服务器。

为了实现这个目标,我启用了作业控制,并使用jobs按组ID杀死异步进程:

set -m
./node_modules/.bin/node src/index.js &
sleep 2

kill -- -$(jobs -p)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接