-1

シグナルに関する次のサンプルコードを理解しようとしています:

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

sig_atomic_t sigusr1_count = 0;

void handler(int signal_number) {
    ++sigusr1_count;
}

int main() {
    struct sigaction sa;
    memset(&sa, 0, sizeof(sa));
    sa.sa_handler = &handler;
    sigaction(SIGUSR1, &sa, NULL );
    printf("SIGUSR1 was raised %d times\n", sigusr1_count);
    return 0;
}

出力は次のとおりです。

SIGUSR1 was raised 0 times

信号が発生しなかったのはなぜですか?

4

3 に答える 3

3

いくつかの理由があります。1 つ目は、プロセスに SIGUSR1 を送信するものがないことです。もう 1 つの、より重要な点は、誰かがそうする時間を与えないことです。シグナル ハンドラーを登録した直後に、シグナルが受信された回数を、おそらく数ミリ秒以内に出力します。sleep(10)結果を印刷する前に、次のようなものを追加する必要があります。

于 2012-12-19T17:33:29.280 に答える
0

SIGUSR1アプリケーションに信号を送信するものが何もないからですか? kill -USR1 pid信号を送るために走ってみましたか?それともkill(pid, SIGUSR1)、このアプリケーションまたは別のアプリケーションからですか?

于 2012-12-19T17:27:14.177 に答える
0

どこに信号を送ったのSIGUSR1ですか?後sigactionと前にそれを感知する必要がありprintfます... 関数にループを追加しますmain

于 2012-12-19T17:27:32.487 に答える