gpt4 book ai didi

有人可以告诉我使用 fork() 系统调用的程序有什么问题吗(编程 C)

转载 作者:行者123 更新时间:2023-11-30 18:38:44 24 4
gpt4 key购买 nike

在这个程序中,我尝试使用fork()函数创建6个子进程并执行executionnode()函数,但我觉得我的输出有问题!我的代码或系统调用发生了什么?我有一个这样的程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>



int executionnode(int i);

int main(){
pid_t childpid;
int i;
int row=6;
for(i=0;i<row;i++)
{ childpid=fork();
if(childpid==0)
continue;
else if (childpid>0)
executionnode(i);

else {
perror("something wrong");
exit(1);
}
}


}


int executionnode(int i){
sleep(i);
printf("hello, I am process:%ld\n",(long)getpid());
char *execArgs[] = { "echo", "Hello, World!", NULL };
execvp("echo", execArgs);

}

每次运行这个程序时,Linux 终端的输出总是这样:

/*
hello, I am process:3226
Hello, World!
lixx3527@tiandiao123:~/Desktop/pa1-release$ hello, I am process:3227
Hello, World!
hello, I am process:3228
Hello, World!
hello, I am process:3229
Hello, World!
hello, I am process:3230
Hello, World!
hello, I am process:3231
Hello, World!
*/

我发现我的输出还没有完成,这意味着我的程序还没有执行完,但是lixx3527@tiandiao123:~/Desktop/pa1-release$已经出现在前面的终端中时间。
我的代码或系统调用发生了什么?
有人可以帮我解释一下吗?我的意思是为什么 lixx3527@tiandiao123:~/Desktop/pa1-release$ 在程序完成所有执行之前出现?
谢谢!

最佳答案

父进程运行得非常快,会 fork 子进程。然后它退出并且 shell 打印一条提示。然后其他 child 运行并打印数据。看起来一个 child 能够在 shell 打印提示之前进行打印,而其他 child 则不能。如果您希望父级等待子级完成,可以使用一个名为 wait 的函数来方便地执行此操作。

关于有人可以告诉我使用 fork() 系统调用的程序有什么问题吗(编程 C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801846/

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