我写了一个程序。它启动一个进程(称为A),该进程生成一个子进程(称为D),该子进程关闭并重新启动A。问题是,现在我无法从终端很好地杀死A(即CTRL-C无法进入)它)。 A 和 D 的 pgid 是相同的,但看起来终端将该进程组删除为其前台,这就是为什么我现在无法向其发送信号。我怀疑当父进程最初死亡时会发生这种情况。有什么办法可以防止这种情况发生吗?我可以更改前台 pgid 以便看起来子进程 (D) 实际上是父进程并且终端不会删除进程组吗?
答案1
一个足够简单的解决方案:
让进程 A 首先执行第二个进程 A(称之为 A')。然后让A永远阻塞。 A' 可以启动 D,D 可以重新启动 A',并且 A 始终作为父级存在。