在这个程序中,我试图使用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$
出现在程序完成所有执行之前?
谢谢!
答案 0 :(得分:3)
父母跑得很快,要求孩子们。然后它退出并且shell打印一个提示。然后其他孩子运行并打印数据。看起来一个孩子能够在shell打印提示之前打印,而其他孩子则不能打印。如果您希望父级等待子级完成,则会有一个方便地命名为wait
的函数来执行此操作。