簡體   English   中英

在父子之間發送信號不起作用

[英]sending signals between father and child is not working

考慮以下程序,流程父親創建流程孩子,流程父親在屏幕上打印“ A”和“ B”,孩子在屏幕上寫下“ C”和“ D”。 問題是我只希望程序以'ACBD'結果出現這是代碼:

void main () {
int pid;
signal(SIGUSR1,SIG_IGN);
if (pid=fork()) {
    printf("A");
    kill(pid,SIGUSR1);
    pause();
    printf("B");
}
else {
    pause();
    printf("C");
    kill(getppid(),SIGUSR1);
    printf("D");
}
}

但是它的輸出沒什么! 任何幫助,將不勝感激 !

父母有可能在“孩子”還沒有活着時嘗試發送信號。 在父代碼中調用kill之前,請添加sleep(1)。 但是,這不是一個很好的解決方案...此外,您應該添加信號處理函數(甚至是一個空的)。 您還應該注意,輸出已緩沖-這意味着它不會立即推送到終端,您可以通過添加“ \\ n”或調用fflush(stdout)來強制推送。

#include <stdio.h> 
#include <signal.h>
void main () {
int pid;
void signal_handler(int test) {}
signal(SIGUSR1, signal_handler);
if (pid=fork()) {
    printf("A");
    fflush(stdout);
    sleep(1);
    kill(pid,SIGUSR1);
    pause();
    printf("B");
    fflush(stdout);
}
else {
    pause();
    printf("C");
    fflush(stdout);
    kill(getppid(),SIGUSR1);
    printf("D");
    fflush(stdout); 
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM