繁体   English   中英

等待信号(POSIX)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM