[英]Waiting for a signal (POSIX)
我正在做一个经典的“等待信号”情况。 我基本上在等待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
一定要
sigprocmask( SIG_BLOCK, &waitset, NULL );
在sigaddset
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.