gpt4 book ai didi

c - wait() 函数行为

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

我有以下代码:

#include <stdio.h>
main(int argc, char *argv[])
{
int n,st;
n = atoi(argv[1]);
while(n*fork()) {
printf("%d %d\n",getpid(), getppid());
n--;
printf("%d\n", wait(&st));
printf("------\n");
}
}

我执行这段代码并得到以下结果:

bash-3.2$ ./test 3
10218 9948
10219
------
10218 9948
10220
------
10218 9948
10221
------

这是我的想法: parent 正在创建一个 child :

10218 9948

但是之后,我不明白为什么 printf("%d\n", wait(&st)); 返回这个 id:10219

wait() 应该返回终止的 child 的 id。

有人能帮忙吗?!

最佳答案

等待不是阻塞,因为没有理由阻塞。 child 已经完成了执行。这是因为 Linux 会安排“子”进程先运行。

这是图表形式发生的事情:

bash(9948)
|
| main(10218) child1(10219) child2(10220) child3(10221)
>-------------->
|
fork--------------->
|
while(0);
terminate;
|
print 10218 9948---<
wait (no block)
print 10219
|
fork----------------------------------->
|
while(0);
terminate;
|
print 10218 9948-----------------------<
wait (no block)
print 10220
|
fork----------------------------------------------------->
|
while(0);
terminate;
|
print 10218 9948-----------------------------------------<
wait (no block)
print 10221
terminate
|
---------------<

关于c - wait() 函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785379/

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