gpt4 book ai didi

c - c 中的 SIGCHLD 处理程序 - 不必要的等待

转载 作者:行者123 更新时间:2023-12-02 00:14:54 26 4
gpt4 key购买 nike

SIGCHLD 处理函数有以下问题。

处理程序代码非常简单:

void sigchld_handler(int signum)
{
pid_t ended;
signal(SIGCHLD, sigchld_handler);
ended = wait(NULL);
// do some stuff with the PID of the finished child process
}

当我只 fork 一个 child 时,这很有效。如果我有 2 个 child (或更多)并且其中一个已经完成运行,则 sigchld_handler() 启动并且当它到达“ended = wait(NULL)”行时,程序会等待我完成的另一个 child 。

有没有办法以不同的方式获取刚刚结束的 child 的PID并避免这种等待?

最佳答案

使用sigaction()相反,处理程序将具有此签名:

void (*sa_sigaction)(int, siginfo_t *, void *);

它在 struct siginfo_t 中传递了您想要的信息,来自手册页:

SIGCHLD fills in si_pid, si_uid, si_status, si_utime and si_stime, providing information about the child. The si_pid field is the process ID of the child

注意:当然,您仍然需要在子进程上wait(),除非您使用SA_NOCLDWAIT

关于c - c 中的 SIGCHLD 处理程序 - 不必要的等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13660550/

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