繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM