繁体   English   中英

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

[英]Sending signals between parent and child process in c

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

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 发送到对方进程
  • 否则两个进程都等待接收信号

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

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

kill()是用于向特定进程 ID 发送特定信号的调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM