[学习笔记]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\n");
    
    pid_t pid;
    printf("befor fork pid:%d\n", getpid());
    
    //fork子进程
    pid = fork();
    if(-1 == pid)
    {
        perror("fork err");
        return 0;
    }
    if(pid > 0) // 大于0是父进程
    {
        printf("parent :%d\n", getpid());
    }
    if(0 == pid)
    {
        printf("chlid :%d\n", getpid());
    }
    
    printf("after fork\n");
    
    
    return 0;
}

/*
运行结果
----------------
sdfsd
befor fork pid:15554
parent :15554
after fork
chlid :15555
after fork
-----------------
*/

 

复制去Google翻译 翻译结果
 

转载于:https://www.cnblogs.com/shichuan/p/4428618.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值