处理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