我有一个有趣的设置。我有一个包装脚本可以做一些事情,并启动一个子进程。我希望能够做到以下几点:
- 让包装脚本能够杀死子进程及其可能创建的任何子进程
- 确保如果包装器本身被发出信号/被杀死,它也会将其传递给子进程
据我所知,这里有点矛盾。为了满足第一个要求,据我所知,我需要在子进程的进程组上使用 killpg 。这很好,但它也会杀死包装脚本本身,因为子脚本具有父脚本的进程组。
所以现在如果我在孩子中设置pgrp以便它得到一个单独的PG,我可以正确地杀死它和它的孩子,但我没有失去第二个要求(如果包装器被杀死它不会去孩子)。
我可以通过在包装脚本中注册一个信号处理程序并通过 killpg 传递信号来解决这个问题,但是这对 SIGKILL 不起作用......这让我有点自相矛盾。
有什么可能的解决方案吗?