当父进程异常终止时,如何退出子进程?

How can I exit a child process when the parent abnormally terminate?

提问人:SSDev 提问时间:12/18/2021 最后编辑:SSDev 更新时间:12/20/2021 访问量:421

问:

当父母异常退出时,我需要终止我的孩子。我在下面的链接中找到了满足我要求的答案:

当父进程退出时,如何使子进程退出?

来自tomcri的回答:

您只需在子进程中启动从 System.in 读取线程即可。如果您不写信给孩子的 stdin,其他人不会这样做,并且线程将“永远”阻止。但是,如果父进程被终止或以其他方式死亡,您将获得 EOF(或异常)。因此,您也可以关闭孩子。(子进程以 java.lang.ProcessBuilder 启动)

实际上,我试图在此答案下方发表评论,但由于缺乏足够的声誉而无法发表评论。

所以我的问题是,我如何识别 stdin 中的字符是 EOF?在我的程序中,我也出于其他目的从 stdin 读取数据。所以我需要以某种方式知道 EOF/(chars 在父母去世时出现)何时出现。stdin 填充了字符 = ÿ(十六进制 = 0xFFFF)。我读过一些页面,例如“最高可能的有效代码点是 Unicode 中的 Ux10FFFF”。那么我该如何检查退出呢?

我的程序是Windows C++,支持Unicode字符。有没有更好的方法来理解这种情况?

C++ Windows Unicode EOF

评论

3赞 Igor Tandetnik 12/18/2021
父级可以创建作业对象、设置标志以及向该作业添加子级。请参阅作业对象JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
0赞 SSDev 12/18/2021
父级不是 C++ 应用程序。
1赞 Raymond Chen 12/18/2021
(1) 什么是?你是怎么得到的?您的解决方案所基于的答案假设是 java,但您的问题被标记为 C++。(2)作业对象不关心程序是用什么语言编写的。只要可以调用 Win32 API,就可以创建作业对象。有关作业对象方法的详细信息,请参阅此答案size
0赞 SSDev 12/19/2021
(1)我只是读取大小(stdin中的字符数)。在 Java 或 C++ 中阅读 stdin 并不重要,对吧?(2) 我的应用程序是浏览器扩展 exe。这就是为什么我提到父级不是C++应用程序。

答: 暂无答案