gpt4 book ai didi

c - c 中 fork() 的输出

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:19 24 4
gpt4 key购买 nike

我最近遇到了这段代码,并没有完全理解它。

  1. 什么情况会导致pid == 0?
  2. 为什么 wait(NULL) 导致程序进入 if(pid == 0)

基本上我不完全理解下面的输出。任何帮助,将不胜感激。谢谢。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> // standard POSIX header file
#include <sys/wait.h> // POSIX header file for 'wait' function
int main(void)
{
int i = -1;
int pid;
pid = getpid();
fprintf(stdout, "parent pid = %d\n", pid);
pid = fork();

if (pid == 0)
{
for (i = 0; i < 10; ++i)
{
fprintf(stdout, "child process: %d\n", i);
sleep(1);
}
exit(0);
}
else
{
fprintf(stdout, "child pid = %d\n", pid);
fprintf(stdout, "waiting for child\n");
wait(NULL);
fprintf(stdout, "child terminated\n");
}
fprintf(stdout, "parent terminating\n");
return 0;
}

输出:

parent pid = 2896
child pid = 5840
waiting for child
child process: 0
child process: 1
child process: 2
child process: 3
child process: 4
child process: 5
child process: 6
child process: 7
child process: 8
child process: 9
child terminated
parent terminating

最佳答案

Susmit Agrawal 的评论中所述和 Jonathan Leffler , 简要回答您的第一个问题:

0 是在 fork() 之后的子进程 内的返回值调用成功返回。子进程的执行从 if (pid == 0) block 开始。它遍历 for 循环,在每次迭代中 printssleep,然后在最后 exit(0)被调用,子进程终止。

fork() 调用之后 父进程 的执行在 else block 中继续。 父进程返回的PID是子进程的PID

简要回答你的第二个问题:

wait(NULL)用于等待子进程状态的改变。在这种特定情况下,状态变化是 child 的终止。参数 NULL 仅表示不会存储任何状态信息。

有关更多详细信息,请阅读链接的手册页。

关于c - c 中 fork() 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54849218/

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