gpt4 book ai didi

c - 解释为什么 fork 会导致 IF 条件表现不同。

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

我通过搜索找到了这个示例。乍一看,我以为只有第一个 fork() 会根据 IF 条件执行,但实际上两个 fork() 调用都会执行。如果 fork() 命令更改为简单的 bool 比较(如 (x==10)),则 IF 条件的行为将按预期进行。

fork() 是什么导致 IF 条件表现不同?

#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
pid_t whichone, first, second;
int howmany;
int status;
int x = 0

if ((first=fork())==0) /* Parent spawns 1st child */
{
printf("Hiya, I am the first child nd my id is %d\n", getpid());
sleep(10);
exit(0);
}
else if (first == -1)
{
perror("1st fork: something went bananas\n");
exit(1);
}
else if ((second=fork())==0) /* Parent spawns 2nd child */
{
printf("Hiya, I am the second child and my id is %d\n", getpid());
sleep(15); /* Sleep 15 sec, then exit */
exit(0);
}
else if (second == -1)
{
perror("2nd fork: something went bananas\n");
exit(1);
}

printf("This is the parent\n");

howmany=0;
while (howmany < 2) /* Wait twice */
{
whichone=wait(&status);
howmany++;

if (whichone==first)
printf("First child exited ");
else
printf("Second child exited ");

if ((status & 0xffff)==0)
printf("correctly\n");
else
printf("uncorrectly\n");
}
return 0;

这是执行时的输出。请注意,两个 fork() 调用均已处理。

> runtThis
Hiya, I am the first child, and my id is 31204
Hiya, I am the second child, and my id is 31205
This is the parent
First child exited correctly
Second child exited correctly

最佳答案

第一个 if 检测它是否在子进程中运行。如果不是,但 fork() 没有失败(即,它没有返回 -1),则它位于原始进程中,然后可以继续并调用 fork( )再次

不知道困惑是什么。

关于c - 解释为什么 fork 会导致 IF 条件表现不同。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24015139/

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