【发布时间】:2013-03-05 20:20:05
【问题描述】:
#include <iostream>
#include <signal.h>
#include <unistd.h>
using namespace std;
void sighandler(int sig) {
cout << "signal received" << endl;
}
int main() {
int pid= getpid();
cout << pid << endl;
signal( SIGUSR1, sighandler );
sigset_t accept;
sigaddset( &accept, SIGUSR1 );
int s;
sigwait(&accept, &s);
cout << s << endl;
return 0;
}
当我运行这个程序并通过“kill -s SIGUSR1 $pid”向它发送一个 SIGUSR1 信号时,它只输出信号的编号 (10),而不是 sighandler 中的文本。我不明白为什么。这是在 Linux 系统上。
【问题讨论】:
-
您可能希望在您的
sigaddset之前添加sigemptyset(&accept)。 -
在信号处理程序中使用
cout会调用undefined behavior。不要那样做,写一个信号处理程序correctly。