等待信号(POSIX)

时间:2013-06-07 12:15:42

标签: c signals posix

我正在做一个经典的“等待信号”的情况。我基本上等待SIGUSR1execlp()覆盖的子进程发送的sigaction()。即使信号确实被sigwaitinfo()捕获,该过程也永远不会从void DataThread::runWaiting() { while(1) { string data; Bottle* bot = inPort.read(); if (bot != NULL) { data = bot->toString(); cout << "I'm about to send : " << data << endl; fprintf(fromYarpPipe,"%s\n",data.c_str()); fflush(fromYarpPipe); sigemptyset( &sigact.sa_mask ); sigact.sa_handler = catcher; sigact.sa_flags = 0; sigaction( SIGUSR1, &sigact, NULL ); sigset_t mask; sigemptyset(&mask); sigaddset(&mask,SIGUSR1); cout << "Got this far and I'm " << getpid() << endl; sigwaitinfo(&mask,NULL); cout << "I just moved on !" << endl; } } } void catcher( int sig ) { cout << "Got some signal : "<< sig << endl;; } 继续。 这是代码(因为它不是很长,我保留了不那么相关的东西,但我基本上是使用管道向子进程发送数据。我也知道我没有检查返回值,但我'已检查,没有错误)

kill -USR1 pid

我每次sigwaitinfo()时都会得到以下输出,但不是Got some signal : 10 后面的行......

{{1}}

1 个答案:

答案 0 :(得分:0)

AFAIK你必须

    sigprocmask( SIG_BLOCK, &waitset, NULL );

sigaddset之后。