1

プログラムに SIGUSR1 になるシグナルを待機させたいのですが、現在は機能しません。

シグナルをキャッチするクラス:

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

int main(int argc, char *argv[]){

    int pid;
    pid=getpid();
    printf("PID: %d\n", pid);

    pause();

    void my_handler(int signum)
    {
        if (signum == SIGUSR1)
        {
            printf("Received SIGUSR1!\n");
        }
    }

    signal(SIGUSR1, my_handler);
}

シグナルを出すプログラム:

#include<stdlib.h>
#include<signal.h>
#include<unistd.h>
#include<time.h>

int main(int argc, char *argv[]){

    int i;

    printf("Filename: %s, Receiver PID: %s\n", argv[1], argv[2]);

    FILE *fp;
    fp=fopen(argv[1], "w");

    kill(atol(argv[1]),SIGUSR1);

}

./receiver 1 実行する受信機のPID(ex 3375)を見つけた後、最初に受信機を実行します./signaler 1 3375

一時停止は待機に使用している機能ですが、機能していません。sigwaitinfo または sigsuspend は機能しますか?

4

1 に答える 1

1

フォーマットによってこれをチェックするのが難しくなることに同意しますが、 pause( )の後にsignal()を呼び出しているようです。シグナルコールをメインの一番上に移動するか、少なくとも一時停止する前に移動する必要があります。

于 2013-02-28T20:10:33.710 に答える