带有 fork() 的 c 程序的奇怪行为

  • 本文关键字:程序 fork 带有 c fork
  • 更新时间 :
  • 英文 :


在我的家庭作业中,我应该用下面的代码解释发生了什么:

#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=%dn", ++x);// add then print
}
printf("printf2: x=%dn", --x);
exit(0);  
}

它非常简单易懂。大多数情况下,我得到以下输出:

printf2: x=0
printf1: x=2
printf2: x=1

这意味着父进程在子进程之前完成,子进程成为僵尸进程。 但有时我会得到以下输出:

printf1: x=2
printf2: x=1

打印后程序冻结(它不打印任何内容,也不会停止(。 我正在 Ubuntu 上运行该程序。 任何解释将不胜感激。

你有 3 个进程写入你的终端:父进程、子进程和 shell 解释器。父进程和 shell 具有"同步"输出,但子进程可以将其输出与其中任何一个交错。您可能认为是一个挂起的过程,实际上可能只是损坏的输出。

当您认为它已挂起时,您可以尝试输入命令并按回车键...

最新更新