在c中在父进程和子进程之间发送信号

时间:2014-11-20 01:35:37

标签: c unix process signals

我试图编写一个在父进程和子进程之间发送信号的程序。 这就是我到目前为止所做的:

void parent_sig(int signo){
    if(signo == SIGINT){
        printf("*** Parent received SIGINT ***\n");
    }else if(signo == SIGTSTP){
        //first time
        signal(SIGUSR1, c_sig_usr);

        //second time
        printf("*** Parent received SIGTSTP ***\n");
        exit(0);

    }else if(signo == SIGUSR1){
        printf("*** Parent received SIGUSR1 ***\n");
        sleep(3);
        signal(SIGUSR1, c_sig_usr); 
    }else{
            pause();
    }

}

void child_sig(int signo){
    if(signo == SIGINT){
        printf("*** Child received SIGINT ***\n");
    }else if(signo == SIGTSTP){
        printf("*** Child received SIGTSTP ***\n");
    }else if(signo == SIGUSR1){
        printf("*** Child received SIGUSR1 ***\n");
        sleep(3);
        signal(SIGUSR1, p_sig_usr); 
    }else{
        pause();
    }
}

int main(void)
{
    pid_t child, parent;
    parent = getpid();

    struct sigaction p_sig;
    p_sig.sa_handler = &parent_sig;


    if((child = fork()) < 0) { 
        perror("**ERROR**: failed to fork process"); 
        exit(EXIT_FAILURE); 
    }else if (child == 0){
        struct sigaction c_sig;
        c_sig.sa_handler = &child_sig;
    }else{

    }


    return 0;
}

我想要

  • 使用fork()
  • 创建子进程
  • 如果收到SIGINT信号,则打印一条消息但不退出
  • 如果收到SIGTSTP信号,第一次将SIGUSR1信号发送到子进程,第二次打印一条消息并退出
  • 如果收到SIGUSR1信号,则将SIGUSR1发送到对方进程
  • 否则两个进程都在等待接收信号

我需要更改/添加此代码才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

signal()是用于配置在接收到特定信号时应调用函数的调用。

kill()是您用来发送

信号的电话