[英]Odd behavior of a c program with 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=%d\n", ++x);// add then print
}
printf("printf2: x=%d\n", --x);
exit(0);
}
这非常简单易懂。 大多数时候我得到以下output:
printf2: x=0
printf1: x=2
printf2: x=1
这意味着父进程在子进程之前完成,子进程成为僵尸进程。 但有时我会得到以下 output:
printf1: x=2
printf2: x=1
打印后程序冻结(它不打印任何内容,也不会停止)。 我在 Ubuntu 上运行程序。 任何解释将不胜感激。
您有 3 个进程写入您的终端:父进程、子进程和 shell 解释器。 父进程和 shell 具有“同步”output,但子进程可以将其 output 与其中任何一个交错。 您可能认为是挂起的进程,实际上可能只是被损坏的 output。
当您认为它已经挂起时,您可以尝试输入命令并按回车...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.