【问题标题】:How child processes gets terminated when the parent is killed using SIGINT?当使用 SIGINT 杀死父进程时,子进程如何终止?
【发布时间】:2018-07-10 06:38:23
【问题描述】:
#!/usr/bin/env bash
for i in $(seq 1  $1);
do
   ./extended&
done
wait

这是我的 bash 脚本,我执行扩展二进制文件的次数与命令行参数中指定的一样多。当我使用 SIGINT 杀死 bash 脚本时,子进程也被杀死了。我在 bash 脚本中调用了 wait 我无法弄清楚子进程是如何被杀死的。我知道等待会让父母等到孩子终止。

【问题讨论】:

    标签: bash unix


    【解决方案1】:

    bash 默认情况下在退出时向所有孩子发送SIGHUP(挂断信号)。如果您不希望这种行为使用disown -h

    来自man bash

    为防止 shell 向特定作业发送信号,应使用 disown 内置函数将其从作业表中删除或标记为不接收 SIGHUP 使用 disown -h。

    【讨论】: