gpt4 book ai didi

c - 使用 fork() 一次在系统上事件的最大并发进程数

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:52 25 4
gpt4 key购买 nike

此程序用于创建最大编号。进程系统允许创建

好吧,但我没明白其他部分是怎么回事

当我执行它时,我的系统会自动挂起启动??

有人可以解释一下下面的代码是如何工作的吗?

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
pid_t pid;
int i = 1;

for(;;)
{
pid = fork();
if(pid < 0)
printf("MAX no of concurrent process are %d\n",i);

if(pid == 0)
i++;
else
{
wait(0);
exit(0);
}
}

return 0;
}

最佳答案

输入 for循环,进程被尝试 fork 。

成功时,在父进程中,fork()返回一些东西 > 0 , child 的 PID。 child 归来0 .

失败时,fork()返回 < 0 .这种情况应该得到妥善处理。

在您的代码中,子进程递增“继承的”i并继续下一个循环运行,但父级等待其子级并退出。

这一切顺利到 fork() 的地步失败。然后你得到一个输出,但是代码仍然继续,直到wait(0)。 .它卡在那里,它的所有 parent 也卡在那里。

如果你愿意

if(pid < 0) {
printf("MAX no of concurrent process are %d\n",i);
exit(0); // or return 0
}

无法创建另一个 child 的 child 将正确退出,其所有 parent 也会这样做。

关于c - 使用 fork() 一次在系统上事件的最大并发进程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27143335/

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