gpt4 book ai didi

c - fork 后退出子进程

转载 作者:太空狗 更新时间:2023-10-29 16:01:15 25 4
gpt4 key购买 nike

我有这段代码,它的目标是创建 N 个子进程并打印出每个 PID 和进程号。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void childProcess(int num)
{
pid_t pid = fork();

printf("Hello! I am process no. %d! my PID is %d!\n", num, pid);
}

int main()
{
int i = 0;

for(i = 1; i <= 5; i++)
{
childProcess(i);
_exit(3);
}
exit(0);
}

但是在尝试了多种方法之后:例如 exit vs _exit,childProcess 中的递归,pid = wait(),我仍然无法只创建 5 个进程。到目前为止,使用这段代码我的输出是:

Hello! I am process no. 1! my PID is 96196!
Hello! I am process no. 1! my PID is 0!

我不确定如何正确退出子进程。如果没有导出,代码会创建 N!过程。

最佳答案

您退出子进程是正确的,只是您在错误的时间退出。在 fork() 之后,每个子进程都继续运行与父进程相同的循环,创建另一个子进程,这就是为什么你最终会有很多子进程。

正确的代码应该是这样的:

for (int i = 0; i < 5; i++) {
if (fork() == 0) {
// child process
printf("I'm child %d, my pid is %d\n", i, getpid());
exit(0);
}
// parent process keeps running the loop
}

关于c - fork 后退出子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32596984/

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