gpt4 book ai didi

c - fork - 我可以退出 parent 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:53 25 4
gpt4 key购买 nike

我已经编写了一个代码,它将调用 exec,如下所示。但是,如果我从 main 调用 isValid,子进程和父进程都会返回,并且我会得到两次输出。

我想退出 exec 并且只想检查 main 中的返回值一次。我需要退出哪个进程才能正常工作?

int isValid(void)
{
int number, statval;
int child_pid;
child_pid = fork();
if(child_pid == -1) { printf("Could not fork! \n"); exit( 1 ); }
else if(child_pid == 0)
{
execl(...); // Child
}
else
{
// Parent
waitpid( child_pid, &statval, WUNTRACED );
if(WIFEXITED(statval))
{
if (WEXITSTATUS(statval) == 0)
return 1;
else
return 0;
}
else
printf("Child did not terminate with exit\n");
}
return 0;
}

int main(void)
{
if (isValid())
{
printf("Valid\n");
}
else
{
printf("Invalid\n");
}
}

最佳答案

execl 失败时,可能会出现双倍输出。上面的代码不检查 execl 返回值。实际上 execl 仅在失败的情况下返回,因此无需检查返回值,但无论如何都有必要处理错误。

编辑:

如果 exec 失败则:

  • child 的 isValid() 在函数结束时返回 0 并且主要打印“Invalid”
  • 父级等待子级退出,然后 WIFEXITED 为真,因为子级退出,WEXITSTATUS 为 0,因为子级正常退出。 Parent 的 isValid 返回 1 并打印“Valid”。

关于c - fork - 我可以退出 parent 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40675543/

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