zoukankan      html  css  js  c++  java
  • 一段有意思的fork()程序

    献上代码,不成敬意:

    #include <unistd.h>
    #include <stdio.h>
    
    int main()
    {
        int i = 0;
    
        if(fork())
            i++;
        if(fork())
            i++;
        if(fork())
            i++;
    
        printf("i = %d
    ",i);
    
        return 0;
    }
    
    

    一段看似简单但实际上却很难一下说出结果的程序,最后的输出会是什么呢?

    首先说一下fork的定义:

    fork函数将运行着的程序分成两个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。 --- 《百度百科》

    返回值:

    若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记(>0);否则,出错返回-1。

    这样的话,我们似乎知道了些什么。父进程的返回值是1,那么只有在父进程中才会执行 i++ 操作,子进程则不会执行。

    talk is cheap, show you the picture(程序的整个流程):

    有一点需要注意:

    子进程只是父进程存储空间的“副本”,这意味着父子进程间不共享这些存储空间。这就是为什么i在子进程中进行加1操作,而父进程中i值不变的原因。

    最后贴上该程序在Linux上的运行结果:

    与分析一致,结题。

  • 相关阅读:
    jquery的y一些实用方法
    关于windows cmd 控制台输出中文
    大数据平台数据治理与建设方案
    django+easyui
    pyecharts 学习使用网址
    林业信息化整理 什么是林业信息化及如何进行林业信息化
    django 批量提交
    基于leaflet地图可视化(一)
    FastAPI 学习手册
    Python学习手册
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/8343601.html
Copyright © 2011-2022 走看看