首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows的SIGCHLD替换

Windows的SIGCHLD替换
EN

Stack Overflow用户
提问于 2012-02-10 03:27:27
回答 2查看 2.2K关注 0票数 4

我希望在Windows上具有SIGCHLD功能(即,当子进程死亡时通知父进程)。我知道在Windows API中没有SIGCHLD的等价物,但我想知道在Windows中实现SIGCHLD的通用方法是什么。我确信这是Windows开发人员经常遇到的问题。

我现在能想到的唯一解决方案就是对孩子们进行投票,看看他们是否还活着。

注意:我的应用程序是单线程的,如果可能的话,我想让它保持单线程。应用程序有一个非阻塞事件循环(使用select())。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-10 03:39:30

我不知道这是不是最好的方法,但它肯定是一种方法。

我假设您正在使用CreateProcess创建进程。这将返回一个包含成员hProcessPROCESS_INFORMATION结构。这是您创建的子进程的句柄。

在这里,你可以用WaitOnSingleObject等待这个句柄,它会阻塞,直到给定的句柄被通知为止(尽管如果你更喜欢做非阻塞的事情,它确实需要超时--它是你能得到的最接近select的等价物)。

如果你走多线程路线,那么你可以在一个单独的线程上等待,然后当WaitOnSingleObject通过时,你可以相应地通知父进程中的一个工作线程。

在单线程样式中,如果使用select-style语义,您将在循环中轮询句柄。

如果您有多个子对象要等待(假设您已经在使用select),那么您可能希望考虑使用WaitForMultipleObjects -如果这是一个与您的代码相关的模型。

票数 5
EN

Stack Overflow用户

发布于 2012-02-10 03:34:24

如果您自己派生了这些子进程,则可以使用Job objects,它们可以在属于您作业一部分的进程结束时通知您。

使用JobObjectAssociateCompletionPortInformation并捕获JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESSJOB_OBJECT_MSG_EXIT_PROCESS

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9217401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档