gpt4 book ai didi

Windows: child 死亡时的通知(崩溃或正常退出)

转载 作者:可可西里 更新时间:2023-11-01 09:59:52 32 4
gpt4 key购买 nike

我试图弄清楚子进程(在 Windows 上使用 CreateProcess() 创建)何时崩溃或正常退出。我正在将 Unix 代码移植到 Windows,但遇到了很多问题。

我在 Unix 上使用 SIGCHLD,如下所示:

struct sigaction act;
bzero(&act, sizeof(act));
act.sa_handler = sig_handler;
act.sa_flags = SA_RESTART;
sigaction(SIGCHLD, &act, 0);

void sig_handler(int signal)
{
int pid, status;

if (signal == SIGCHLD) {
while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
// Remove pid from a data structure
}
}
}

我正在研究创建一个调用 WaitForMultipleObjects 的新线程的解决方案,但问题是可以随时创建新进程,而且我认为我不能在创建新进程时中断 WaitForMultipleObjects。我不想为每个具有 WaitOnSingleObject 的进程生成一个新线程(如果必须的话,我宁愿拉入一个线程)。

请问在这种情况下最好的解决方案是什么?

最佳答案

其实有一种方法可以中断WaitForMultipleObjects()。使用 CreateEvent() 创建指定的手动重置事件对象。将事件句柄包括到 WaitForMultipleObjects() 以及您现有的子进程句柄。每次创建新的子进程时,用 SetEvent() 向事件发出信号。这样,WaitForMultipleObjects() 会在子进程退出(无论出于何种原因)或事件发出信号时退出,然后您可以根据需要更新句柄列表,使用 ResetEvent( ),然后再次调用 WaitForMultipleObjects()

关于Windows: child 死亡时的通知(崩溃或正常退出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17374592/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com