gpt4 book ai didi

c - Fork, C 后无法杀死父进程

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:56 25 4
gpt4 key购买 nike

我正在尝试复习一些 C 技能,并且正在玩代码以在两个进程之间进行 fork 和通信。

在下面的程序中,我预计 child 的 SIGINT 信号会导致父进程在打印出 child 已经死亡之前终止。但是,消息“Parent: chlid is dead”仍然是最后要打印的东西。

有什么我想念的吗?

谢谢。

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>

int main() {
char *msg;
int forkval, parentpid;
int p2c[2];

pipe(p2c);

forkval = fork();

if (forkval < 0) exit(EXIT_FAILURE);

if (forkval) { /* Parent */
msg = "Parent: reporting\n";
close(p2c[0]);
write(STDOUT_FILENO,msg,strlen(msg));
write(p2c[1], &forkval, sizeof(int));
close(p2c[1]);
wait(NULL);
msg = "Parent: chlid is dead\n";
write(STDOUT_FILENO, msg, strlen(msg));
} else { /* Child */
msg = "Child: reporting\n";
close(p2c[1]);
write(STDOUT_FILENO,msg,strlen(msg));
read(p2c[0], &parentpid, sizeof(int));
close(p2c[0]);
fprintf(stdout, "Child: parent's pid is %i\n", parentpid);
kill(parentpid,SIGINT);
fprintf(stdout, "Child: dying\n");
}
exit(EXIT_SUCCESS);
}

终端输出:

Parent: reporting
Child: reporting
Child: parent's pid is 10940
Parent: chlid is dead

最佳答案

fork 返回的非零值是子进程的 pid。所以 child 正在自杀,这就是为什么您看不到来自 child 的 “Child: dying” 消息,但确实看到来自 parent 的最后一条消息。

关于c - Fork, C 后无法杀死父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27087113/

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