1

我正在做一个经典的“等待信号”情况。我基本上在等待SIGUSR1从使用execlp(). 即使使用 捕获信号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
4

1 回答 1

0

AFAIK 你必须

    sigprocmask( SIG_BLOCK, &waitset, NULL );

之后sigaddset

于 2013-06-07T12:19:17.563 回答