簡體   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