其他分享
首页 > 其他分享> > 处理SIGCHLD,如何记录孩子死亡时的返回值

处理SIGCHLD,如何记录孩子死亡时的返回值

作者:互联网

void childSignalHandler(int signo) {
    int status;

    pid_t pid = wait(&status);

    struct PIDList* record = getRecordForPID(childlist, pid);
    if (record != NULL)
        record->returnValue = status;
}

快速提问:

我希望这个处理程序,当一个孩子死了(这个应用程序产生了很多孩子),获得他们的返回值并记录它(最后三行).这会这样做,还是我得到所有这些API业务错误?

感谢您的时间!

(另外,linux API术语令人毛骨悚然,检查死亡的孩子和诸如此类的东西)

解决方法:

如果您将函数设置为SIGCHLD的处理程序,那么这应该可以完成.

但是,SIGCHLD不仅可以在孩子退出后发送到父进程.其他一些事件也以这种方式发出信号(例如当孩子停止时).有关详细说明,请参见man wait(3).

标签:c-3,linux,unix,signals,low-level
来源: https://codeday.me/bug/20191006/1858665.html