我希望在Windows上具有SIGCHLD功能(即,当子进程死亡时通知父进程)。我知道在Windows API中没有SIGCHLD的等价物,但我想知道在Windows中实现SIGCHLD的通用方法是什么。我确信这是Windows开发人员经常遇到的问题。
我现在能想到的唯一解决方案就是对孩子们进行投票,看看他们是否还活着。
注意:我的应用程序是单线程的,如果可能的话,我想让它保持单线程。应用程序有一个非阻塞事件循环(使用select())。
发布于 2012-02-10 03:39:30
我不知道这是不是最好的方法,但它肯定是一种方法。
我假设您正在使用CreateProcess创建进程。这将返回一个包含成员hProcess的PROCESS_INFORMATION结构。这是您创建的子进程的句柄。
在这里,你可以用WaitOnSingleObject等待这个句柄,它会阻塞,直到给定的句柄被通知为止(尽管如果你更喜欢做非阻塞的事情,它确实需要超时--它是你能得到的最接近select的等价物)。
如果你走多线程路线,那么你可以在一个单独的线程上等待,然后当WaitOnSingleObject通过时,你可以相应地通知父进程中的一个工作线程。
在单线程样式中,如果使用select-style语义,您将在循环中轮询句柄。
如果您有多个子对象要等待(假设您已经在使用select),那么您可能希望考虑使用WaitForMultipleObjects -如果这是一个与您的代码相关的模型。
发布于 2012-02-10 03:34:24
如果您自己派生了这些子进程,则可以使用Job objects,它们可以在属于您作业一部分的进程结束时通知您。
使用JobObjectAssociateCompletionPortInformation并捕获JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS或JOB_OBJECT_MSG_EXIT_PROCESS。
https://stackoverflow.com/questions/9217401
复制相似问题