Bash:是否有可能在子 shell 中捕获 SIGTERM (或其他)?

Bash:是否有可能在子 shell 中捕获 SIGTERM (或其他)?

考虑多个子 shell,每个子 shell 写入自己的日志文件。考虑一个子 shell 失败,导致向SIGTERM所有子 shell 发送(使用某种机制)。收到后SIGTERM所有子 shell 都会终止。但是,SIGTERM以 - 终止的子 shell 日志文件会被保留。这就是问题。

问题:收到后如何删除子shell日志文件SIGTERM

我试过这个:

_term()
{
  rm -f $log_file
}

trap _term SIGTERM

然而,据我了解,这是行不通的,因为“陷阱处理程序永远不会被子 shell 继承”。

在里面的描述trap我懂了:

当进入子 shell 时,未被忽略的陷阱将设置为默认操作。这并不意味着不能在子 shell 中使用 trap 命令来设置新陷阱。

最后一句话有点令人困惑。有人可以解释一下这可能吗根本不SIGTERM(或其他)捕获在子shell中?

答案1

是的,它们不是遗传的。但您可以在子 shell 中定义一个新陷阱。父 shell 有它自己的一组陷阱。

然后,您向该父 shell 发送一个信号,它可以捕获该信号并向子 shell 发出自己的一组信号。

这是一堆带有解释的示例: https://tldp.org/LDP/abs/html/debugging.html#EX76

相关内容