这段代码产生的结果是不是乱序?

软件和网站开发以及相关技术探讨
回复
头像
blackwolf1983
帖子: 30
注册时间: 2007-05-20 22:15

这段代码产生的结果是不是乱序?

#1

帖子 blackwolf1983 » 2007-10-30 22:41

代码: 全选

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

pid_t r_wait(int *stat_loc) {
   pid_t retval;
   while (((retval = wait(stat_loc)) == -1) && (errno == EINTR)) ;
   return retval;
}

int main(int argc, char *argv[]) {
   pid_t childpid;
   int i, n;

   if (argc != 2) {
      fprintf(stderr, "Usage: %s n\n", argv[0]);
      return 1;
   }
   n = atoi(argv[1]);
   for (i = 1; i < n; i++)
      if ((childpid = fork()) <= 0)
         break;

   while(r_wait(NULL) > 0) ;    /* wait for all of your children */ 
   fprintf(stderr, "i:%d  process ID:%ld  parent ID:%ld  child ID:%ld\n",
           i, (long)getpid(), (long)getppid(), (long)childpid);
   return 0;
}
我想知道这个短码的结果是不是子进程随机出现,不会按一定的顺序出来。
ps:我实验的结果是按顺序出现。
回复