考虑以下程序,其中进程父创建进程子进程,父进程应在屏幕'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");
}
}
但它的输出没什么! 任何帮助将不胜感激!
答案 0 :(得分:0)
父母有可能在'孩子'还没有活着的时候发送信号。在父代码中调用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);
}
}