我在非阻止模式下使用signalfd()
功能,并且关闭exec()
功能也已启用:
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGCHLD);
f_socket = signalfd(-1, &set, SFD_NONBLOCK | SFD_CLOEXEC);
然后我使用poll()
命令监听信号。
使用该机制时,是否可能错过SIGCHLD
信号?
我有一台服务器已经运行了将近3周,它有一个僵尸。我能想到的唯一方法就是儿童过程死亡,不知何时父母没有收到信号。每次我访问服务器时,它通常会创建许多子项(最小值大约为10,我认为最大值为30),所有这些都被捕获。所以我不太确定为什么只有一个人消失。