我正在做一个经典的“等待信号”情况。我基本上在等待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