我想弄清楚当一个子进程(使用CreateProcess()在Windows上创建)崩溃或正常存在。我将Unix代码移植到Windows,并且有很多问题。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的进程产生一个新的线程(如果必须的话,我更喜欢拉入一个线程)。
这种情况下最好的解决方案是什么?
你是什么意思“最好?” –
我想实现上面的行为,如果可能的话:主线程或一个线程,当子进程崩溃或终止正常时,所有子进程都会中断。这将是我最理想的情况。 – user1777907
使用RegisterWaitForSingleObject。这注册了一个函数,当手柄被发信号时被调用。 –