为什么signalhandler没有输出任何东西?

blu*_*ues 2 c++ linux signals

#include <iostream>
#include <signal.h>
#include <unistd.h>

using namespace std;

void sighandler(int sig) {
    cout << "signal received" << endl;
}

int main() {

    int pid= getpid();
    cout << pid << endl;

    signal( SIGUSR1, sighandler );

    sigset_t accept;
    sigaddset( &accept, SIGUSR1 );
    int s;

    sigwait(&accept, &s);

    cout << s << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序并通过"kill -s SIGUSR1 $ pid"向它发送SIGUSR1信号时,它只输出信号的数量(10)而不是sighandler中的文本.我不明白为什么.这是在Linux系统上.

Ola*_*che 6

sigwait - wait for queued signals

描述

sigwait()函数从set中选择一个待处理信号,从系统的待处理信号集中原子地清除它,并在sig引用的位置返回该信号编号.

因此,通过使用sigwait(),信号已经由您的程序传递和处理.

当您取消sigwait呼叫并进行休眠或忙碌等待时,SIGUSR1信号将被发送到您的信号处理程序,并将打印"收到信号"消息.