gpt4 book ai didi

c - 无需管道即可将数据从子进程传递到父进程

转载 作者:行者123 更新时间:2023-11-30 14:32:25 25 4
gpt4 key购买 nike

有人告诉我,我们可以通过在子进程中使用 exit(v) 和在父进程中使用 wait() 来传递值 v处理,然后使用 WEXITSTATUS() 检索 v。我浏览了网络,但无法找到解决方案。任何想法或代码都会有用。

最佳答案

一个接近最小的解决方案是:

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

int main(void)
{
pid_t pid = fork();
if (pid < 0)
{
fprintf(stderr, "failed to fork\n");
return -1;
}
else if (pid == 0)
{
exit(42); // The Answer to Life, the Universe, and Everything
}
int corpse;
int status;
while ((corpse = wait(&status)) > 0)
{
if (WIFEXITED(status))
printf("PID %d exited with status %d\n", corpse, WEXITSTATUS(status));
else if (WIFSIGNALED(status))
printf("PID %d died from signal %d\n", corpse, WTERMSIG(status));
else
printf("PID %d exited with status 0x%.4X (which is neither exited nor terminated)\n",
corpse, status);
}
return 0;
}

运行时,它产生:

PID 28883 exited with status 42

请注意,在 POSIX 系统上,您只能通过 exit() 传递值 0..255,除非您使用 sigaction()SIGCHLD 陷入深层次的恶作剧SA_SIGINFO 等等(即使如此,您也只能获得 4 个字节的数据)。 Windows 系统上的 YMMV。

关于c - 无需管道即可将数据从子进程传递到父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59817217/

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