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

时间:2015-09-26 20:43:34

标签: 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 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$出现在程序完成所有执行之前?  谢谢!

1 个答案:

答案 0 :(得分:3)

父母跑得很快,要求孩子们。然后它退出并且shell打印一个提示。然后其他孩子运行并打印数据。看起来一个孩子能够在shell打印提示之前打印,而其他孩子则不能打印。如果您希望父级等待子级完成,则会有一个方便地命名为wait的函数来执行此操作。