考虑多个子 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