当父进程退出时,子进程会死掉吗? (重击)

问题描述 投票:0回答:2

我正在使用并行处理,而不是处理 cvar 和锁,我发现按顺序在 shell 脚本中运行一些命令以避免在一个地方出现竞争条件要容易得多。新问题是这些命令之一调用另一个程序,操作系统已决定将其放入新进程中。我需要从父程序中杀死这个进程,但是父程序只知道父程序的pid(shell脚本),所以这个进程继续自己执行。

bash 有没有办法在父进程死亡时将子进程设置为死亡?我试图弄清楚如何将其作为守护进程执行,因为我读到守护进程在父进程死亡时退出,但这很棘手,我不能完全正确。谢谢!

linux bash shell process kill
2个回答
0
投票

提出了这种方法,当父进程退出时杀死分叉(例如来自

SIGTERM
$ kill
的默认优雅
CTRL+C
)。

script.sh

#!/usr/bin/env bash
set -x
trap "pkill -SIGTERM -P $$" EXIT

{ sleep 3; echo 0_1; sleep 2; echo 0_2; sleep 2; echo 0_3; sleep 2; echo 0_4; } &
{ sleep 3; echo 1_1; sleep 2; echo 1_2; sleep 2; echo 1_3; sleep 2; echo 1_4; } &

wait

但是,当父级被强行杀死时,这不会杀死分叉(例如来自

SIGKILL
$ kill -9


-1
投票

发现问题,并修复了它(除了一些令人讨厌的消息,它们不知何故无法重定向到/dev/null)。

trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
© www.soinside.com 2019 - 2024. All rights reserved.