【问题标题】:How to kill child processes in Bash? [duplicate]如何杀死 Bash 中的子进程? [复制]
【发布时间】:2017-03-21 12:57:10
【问题描述】:

我正在尝试在 linux 中进行操作,尝试使用 openssl 速度刻录 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 simian Army 用于烧录 CPU 的代码,它可以正常执行,但问题是我无法杀死所有 32 个进程,我尝试了所有方法

pkill -f pid/process name
killall -9 pid/process name
etc.,

我杀死进程的唯一成功方法是通过用户杀死它

pkill -u username

如何在不使用用户名的情况下终止这些进程?

非常感谢任何帮助

【问题讨论】:

标签: linux bash process openssl kill-process


【解决方案1】:

最后,我找到了解决我自己问题的方法,

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

【讨论】:

    【解决方案2】:

    杀死一个进程并不会自动杀死它的子进程。杀死你的 bash 脚本不会杀死 openssl speed 进程。

    您可以使用kill 调用来扩大网络,这就是您使用pkill -u 所做的事情。或者,您可以在脚本中使用 trap 并添加错误处理程序。

    cleanup() {
        # kill children
    }
    
    trap cleanup EXIT
    

    【讨论】:

    • 你可以用你的杀戮召唤撒下更大的网???你能提供更多关于这方面的信息吗,
    【解决方案3】:

    我有一个类似的问题和解决方案,我需要在一段时间后终止 NodeJS 服务器。

    为此,我启用了Job control,并通过jobs 的组ID 杀死了异步进程:

    set -m
    ./node_modules/.bin/node src/index.js &
    sleep 2
    
    kill -- -$(jobs -p)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2017-01-21
      • 1970-01-01
      相关资源
      最近更新 更多