Linux中父进程与子进程的困惑

直接上代码,第一个程序没有对fork()进行出错判断,第二个程序进行了fork()出错判断,但是两个程序的输出却截然不同,这是为什么?

/*程序1, 程序2为去掉后面的注释*/
1 #include <stdlib.h>
  2 #include <unistd.h>
  3 #include <stdio.h>
  4 
  5 int main(void)
  6 {
  7     pid_t pid;
  8 
  9     pid = fork();
 10 
 11     if (pid > 0)
 12     {
 13         while (1) {
 14         printf("I am parent.\n");
 15         printf("parent PID is %d\n", getpid());
 16         sleep(1);
 17         }
 18     }
 19     else if (pid == 0)
 20     {
 21         while(1) {
 22         printf("I am child.\n");
 23         printf("child PID is %d\n", getpid());
 24         sleep(1);
 25         }
 26     }
 27    // else
 28    // {
 29    //   perror("fork");
 30    // exit(1);
 31    // }
 32 
 33     return 0;
 34 }

程序1的输出结果没有逻辑
程序2的输出交替有序
这是为什么

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^