gpt4 book ai didi

c - 本程序的控制流程

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

我有这个程序,它创建了一个孤立进程,但我不太了解它的控制流以及它给出的输出:

#include<stdio.h>
#include<unistd.h>
int main()
{

pid_t p;

/* create child process */
p=fork();

if(p==0) {
/* fork() returns Zero to child */
sleep(10);
}
printf("The child process pid is %d parent pid %d\n", getpid(), getppid());

/*parent/child waits for 20 secs and exits*/
sleep(20);

printf("\nProcess %d is done its Parent pid %d...\n", getpid(), getppid());

return 0;
}

输出:

shiv@ubuntu:~/ds/unix$ ./a.out
The child process pid is 2575 parent pid 1922

The child process pid is 2576 parent pid 2575

Process 2575 is done its Parent pid 1922...

shiv@ubuntu:~/ds/unix$
Process 2576 is done its Parent pid 1...

因此它首先生成“子进程……”,然后休眠 10 秒。并再次执行“子进程等等”。再次看到“ parent 完成了......”的事情发生了

即使这个问题看起来很愚蠢,也请帮助我。

最佳答案

  1. 您的程序已启动,创建一个我们称为父进程的进程。

  2. fork() 的调用复制父进程及其整个状态并执行它,从而创建子进程。父进程和子进程现在同时运行。

  3. a) 子进程从 fork() 接收到 0 作为返回值,因此它会休眠 10 秒。b) 父进程接收子进程的pid作为fork()的返回值,当然不等于0;所以父进程不会休眠10秒。

  4. 父进程打印“子进程pid为2575父pid 1922”。然后父进程遇到休眠 20 秒的指令,就会这样做。

  5. 子进程从 10 秒的 sleep 中醒来。它打印“子进程pid是2576父进程pid 2575”。之后,子进程遇到休眠 20 秒的指令,就会这样做。

  6. 父进程从 20 秒的 sleep 中醒来。它打印“进程 2575 已完成其父进程 pid 1922...”,然后退出。

  7. 子进程从 20 秒的 sleep 中醒来。它打印“进程 2576 已完成其父进程 pid 1...”,然后退出。但是为什么父进程 pid 是 1,尽管之前是 2575?因为父进程已经退出,导致子进程被pid为1的init进程孤立。

关于c - 本程序的控制流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247409/

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