我遇到了孤立进程的问题,我试图弄清楚最好的或者#34;正确的" (如果存在的话)处理这种情况的方法。
我的主进程在子进程中执行任意命令,并且子进行某项任务,然后等待父进程读取任务结果。如果父母在被阅读之前被杀死或崩溃,那么我最终会得到一个永远无法完成的孤儿。
如果主要过程消失了,那么我就不再关心孩子的输出了。因此,我正在开发一个实现,以便下次启动服务时,它会清除最后一个实例中的所有孤立子项。
这比第一眼看上去更难。孤儿由init重新定义,但它们与init的真正进程无法区分,并且因为命令是任意的,所以没有grep足以将它们标记为我关心的孤儿。
我想也许我可以在进程级别设置一个字段来将我的子进程标记为属于我,我可以稍后查找然后终止相应的进程。我考虑过添加虚假的" MINE = 1"命令行上的环境变量,但这让我非常难看。我考虑过创建一个名为" childuser"并以此用户身份运行所有子进程,以便我可以普遍杀死他的所有进程。
但哪种方法最好?或者,有没有人有更好的主意?
编辑:是,通过管道向父母报告