有人能告诉我使用fork()系统调用(编程C)的程序有什么问题吗
在这个程序中,我试图使用fork函数来创建6个子进程并执行executionnode函数,但我觉得我的输出有问题! 我的代码或系统调用发生了什么? 我有一个这样的程序有人能告诉我使用fork()系统调用(编程C)的程序有什么问题吗,c,linux,excel,unix,fork,C,Linux,Excel,Unix,Fork,在这个程序中,我试图使用fork函数来创建6个子进程并执行executionnode函数,但我觉得我的输出有问题! 我的代码或系统调用发生了什么? 我有一个这样的程序 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> int ex
#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);
}
我发现我的输出甚至没有完成,这意味着我的程序的执行还没有完成,但是lixx3527@tiandiao123:~/Desktop/pa1 release$已提前出现在终端中。
我的代码或系统调用发生了什么?
有人能帮我解释一下吗?我是说为什么lixx3527@tiandiao123:~/Desktop/pa1 release$在程序完成所有执行之前出现?
谢谢大家! 家长们跑得很快,把孩子们甩在后面。然后退出,shell打印一个提示。然后其他子级运行并打印数据。看起来在shell打印提示之前,一个孩子能够打印,而其他孩子则不能。如果您希望父进程等待子进程完成,则有一个名为wait的函数可以方便地完成此操作。应该注意,wait可能会重复,它只释放一个僵尸子进程。为了让所有子进程首先完成,请查看waitpid并将其用于创建的每个子进程。
/*
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!
*/