繁体   English   中英

有人可以使用fork()系统调用告诉我我的程序怎么了(编程C)

[英]can someone tell me what's wrong with my program using fork() system calls(Programming C)

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

#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$
谢谢!

父母跑得很快,分叉孩子。 然后退出,外壳程序将显示提示。 然后其他孩子运行并打印数据。 看起来一个孩子能够在外壳程序打印提示符之前进行打印,而其他孩子则不能。 如果您想让父母等待孩子完成工作,可以使用一个方便地命名为wait的函数来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM