10

sigsuspend トピックについて説明が必要です。簡単な例があります

sigset_t mask, oldmask;
sigemptyset (&mask);
sigaddset (&mask, SIGRTMIN+1);
sigprocmask (SIG_BLOCK, &mask, &oldmask);

sigsuspend(&oldmask);

sigprocmask (SIG_UNBLOCK, &mask, NULL);

これが私がこれをどのように理解するかです:

  • sigemptyset はシグナルのリストをクリアします (マスク) - 現在ブロックされているシグナルで初期化されているため (?)
  • sigaddset はマスクに SIGRTMIN+1 を追加します
  • sigprocmask は mask+oldmask 内のすべてのシグナルをブロックするように設定します
  • sigsuspend(&oldmask) は、ブロックされたシグナルの 1 つが到着するまでスレッドの実行を中断しますか? SIGRTMIN+1 をブロックしたい場合、sigsuspend(&mask) は必要ないのでしょうか?

    次に、ループ内にそのような sigsuspend があり、いくつかの SIGRTMIN+1 シグナルが到着したとします。そのようなループは各信号に対して継続しますか? ある種のキューで?

    while(1){
        sigsuspend(&oldmask)
        printf("recieved signal");
    }
    

    シグナルごとに「受信シグナル」が印刷されるようにするには?

  • 4

    1 に答える 1