gpt4 book ai didi

c - 父亲和 child 之间发送信号不起作用

转载 作者:行者123 更新时间:2023-11-30 17:17:06 26 4
gpt4 key购买 nike

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

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

最佳答案

当“ child ”尚未存活时, parent 可能会尝试发送信号。在父代码中调用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);
}
}

关于c - 父亲和 child 之间发送信号不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29468597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com