请问用 Boost::Process 库在 Windows 下如何使子进程在父进程退出后自动退出?

2019-12-23 09:35:26 +08:00
 fyyz
windows 的 CreateProcess() 能配合 JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 使用,实现该功能。
Boost::Process 有什么方法能做到吗?
补充:我没有子进程源码,无法修改子进程的可执行文件。
3679 次点击
所在节点    C++
7 条回复
augustheart
2019-12-23 09:39:45 +08:00
没用过这个,不过研究一下能不能直接用 api 不行么?
geelaw
2019-12-23 09:48:19 +08:00
根据 2017 年的讨论 boost 没有实现该功能。

https://github.com/klemens-morgenstern/boost-process/issues/66

你需要自行用 Windows job control 实现。

为什么 boost 没有该功能?一个简单的原因是 POSIX 中似乎没有这样的 API。
ysc3839
2019-12-23 10:05:04 +08:00
有个非正规的做法是把进程自己也加入 job 中,这样自己的子进程也会自动加入 job。
fengjianxinghun
2019-12-23 10:16:17 +08:00
@geelaw Linux 有 prctl(PR_SET_PDEATHSIG, SIGHUP, 0, 0, 0);
geelaw
2019-12-23 10:24:49 +08:00
@ysc3839 #3 这需要假设进程是用 CreateProcessEx 建立的(我觉得 boost 应该是),此外还要在 job 里不允许子进程离开 job。

@fengjianxinghun #4 我说的是 POSIX,不是 Linux。
shilyx
2019-12-23 10:32:36 +08:00
boost 几乎不可能包括 JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 的功能,因为里面有些坑,boost 也没法从框架上解决。还是自己做吧,反正也是 windows 平台。
ysc3839
2019-12-23 11:01:13 +08:00
@geelaw 应该不需要某个特定 API 才能生效的,不然的话不是能轻易绕过 job 限制?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/631372

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX