在我的作业中,我应该解释以下代码中发生的情况:
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(){
int x = 1;
if(fork() == 0){// child
printf("printf1: x=%d\n", ++x);// add then print
}
printf("printf2: x=%d\n", --x);
exit(0);
}
这非常简单易懂。大多数时候,我得到以下输出:
printf2: x=0
printf1: x=2
printf2: x=1
这意味着父进程在孩子和僵尸进程之前完成。 但是有时候我得到以下输出:
printf1: x=2
printf2: x=1
打印后,程序冻结(它不打印任何内容并且不会停止)。 我在Ubuntu上运行该程序。 任何解释将不胜感激。