gpt4 book ai didi

bash - 杀死管道左侧的进程

转载 作者:行者123 更新时间:2023-11-29 09:06:15 25 4
gpt4 key购买 nike

我在 bash 中有以下内容:

富 |酒吧

我希望 foo 在脚本终止时死掉(使用 TERM 信号)。不幸的是,他们都没有死。我试过这个:

exec foo | bar

这绝对是一无所获。然后我试了这个:

function run() {
"$@" &
pid=$!
trap "kill $pid" EXIT
wait
}

run foo | bar

同样,没有。现在我又多了一个进程,当我终止父进程时,没有一个进程死掉。

最佳答案

通过终止整个进程组而不仅仅是 bash(父进程),您也可以向所有子进程发送终止信号。语法示例是:

kill -SIGTERM -$!
kill -- -$!

例子:

bash -c 'sleep 50 | sleep 40' & sleep 1; kill -SIGTERM -$!; wait; ps -ef | grep -c sleep
[1] 14683
[1]+ Terminated bash -c 'sleep 50 | sleep 40'
1

请注意,此处的 wait 等待 bash 被有效终止,这需要几毫秒的时间。另请注意,最终结果 (1) 是“grep sleep”本身。结果为 3 表明这不起作用,因为两个额外的 sleep 进程仍在运行。

kill 手册提到:

-n
where n is larger than 1. All processes in process group n are signaled.
When an argument of the form '-n' is given, and it is meant to denote a
process group, either the signal must be specified first, or the argument
must be preceded by a '--' option, otherwise it will be taken as the signal
to send.

关于bash - 杀死管道左侧的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52041852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com