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(例如 3375)之后,您将首先运行接收器./signaler 1 3375

暂停是我用来等待但它不起作用的功能,sigwaitinfo 或 sigsuspend 会起作用吗?

4

1 回答 1

1

我同意格式使检查变得困难,但看起来你在pause( )之后调用了 signal()。您需要将信号调用移动到 main 的顶部,或者至少在暂停之前。

于 2013-02-28T20:10:33.710 回答