等待信号

时间:2013-02-28 19:49:41

标签: c signals

我希望我的程序等待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

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

1 个答案:

答案 0 :(得分:1)

我同意格式化会使检查变得困难,但看起来你在 pause()之后调用signal()。您需要将信号呼叫移至主要顶部,或至少在暂停之前。