c-在父亲和孩子之间发送信号是行不通的



考虑以下程序,其中进程父创建进程子进程,父进程应该在屏幕上打印"a"one_answers"B",子进程写"C"one_answers"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");
}
}

但它的输出什么都不是!任何帮助都将不胜感激!

当"child"还不存在时,父级可能正在尝试发送信号。在父代码中调用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); 
  }
}

最新更新