zoukankan      html  css  js  c++  java
  • [学习笔记]fork深入理解

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include <unistd.h>
    #include<errno.h>
    
    //fork进程
    //一次调用,两个分支返回
    //Linux内核如何做到的这一点?
    //   每一个进程在各自的地址空间中返回
    
    //为什么fork返回值设计成>0是父进程分支 =0是子进程分支
    //   父子关系是1:n的关系,父亲找孩子的pid比较难
    
    //fork理解角度:一次调用,2个分支同时运行, 并发概念.
    
    //fork子进程为什么从fork之后运行,不是再从头到尾从main函数重新来一遍?
    //   fork创建子进程的机制有关系. 子进程创建机制:写实复制
    //   子进程要拷贝父进程的代码段/堆栈段/数据段/PCB进程控制块(Linux内核管理进程的数据结构)
    //既然孩子进程拷贝了父进程的运行场景,所以孩子没有必要再运行一边了
    
    //系统错误码放在全局变量errno里面
    //在程序中,perror可以把errno对应的string打印出来
    //如果在shell下可以通过perror + 错误码打印字符串
    
    int main(void)
    {
        
        printf("sdfsd
    ");
        
        pid_t pid;
        printf("befor fork pid:%d
    ", getpid());
        
        //fork子进程
        pid = fork();
        if(-1 == pid)
        {
            perror("fork err");
            return 0;
        }
        if(pid > 0) // 大于0是父进程
        {
            printf("parent :%d
    ", getpid());
        }
        if(0 == pid)
        {
            printf("chlid :%d
    ", getpid());
        }
        
        printf("after fork
    ");
        
        
        return 0;
    }
    
    /*
    运行结果
    ----------------
    sdfsd
    befor fork pid:15554
    parent :15554
    after fork
    chlid :15555
    after fork
    -----------------
    */
  • 相关阅读:
    从《兄弟连》到团队管理
    将来
    [译] TypeScript入门指南(JavaScript的超集)
    基于cocos2dx迷宫游戏
    SVN版本管理教程
    arcgis for android 本地缓存
    vs2010变的特别卡解决办法
    cocos2d-x自适应屏幕
    cocos2d-x使用CCScale9Sprite
    cocos2dx开发入门文档
  • 原文地址:https://www.cnblogs.com/shichuan/p/4428618.html
Copyright © 2011-2022 走看看