Bash kill后台命令块

我有一些bash脚本,我在后台放了一个命令块,然后想杀死它们

#!/bin/bash
{ sleep 117s; echo "test"; } &
ppid=$!
# do something important
<kill the subprocess somehow>

我需要找到一种方法来杀死子进程,所以如果它仍然处于休眠状态,那么它将停止休眠并且不会打印“test”.我需要在脚本中自动完成,所以我不能使用另一个shell.

到目前为止我已经尝试过:

> kill $ppid – 根本不会杀死睡眠(也有-9标志),睡眠ppid变为1但测试不会被打印
> kill%1 – 与上面相同的结果
> kill – – $ppid – 它抱怨kill:( – 30847) – 没有这样的进程(并且子进程仍在这里)
> pkill -P $ppid – 已打印测试

我该怎么做?

最佳答案 在其自己的子shell中运行命令组.使用set -m在其自己的进程组中运行子shell.杀死进程组

#!/bin/bash
set -m
( sleep 117s; echo "test"; ) &
ppid=$!
# do something important
kill -- -$ppid
点赞