手册页system()
指出“在执行命令期间,SIGCHLD 将被阻止”
在我的代码中,我正在安装一个处理程序,用于SIGCHLD
将某些内容写入日志并忽略信号。我这样做是为了了解在我的日志中退出的孩子并避免僵尸进程。
使用system()
通话时出现问题。有了这个处理程序,system()
总是返回-1
而不是孩子的退出代码。但是根据手册页的上述引用,system()
应该处理来自孩子的信号。
我究竟做错了什么?
我的代码如下:
static void handleSignal(int signum, siginfo_t* inf, void* ctx) {
cout << "in signal " << signum << endl;
}
int main() {
struct sigaction chldsa, prevchld;
chldsa.sa_sigaction = &handleSignal;
sigemptyset(&chldsa.sa_mask);
chldsa.sa_flags = SA_SIGINFO | SA_RESTART | SA_NOCLDSTOP | SA_NOCLDWAIT;
if (sigaction(SIGCHLD, &chldsa, &prevchld) == -1) {
cout << "Failed setting sigaction SIGCHLD " << errno;
}
int x = system("exit 1");
cout << "RET=" << x << endl;
}