进程相关函数理解

进程号(PID):

标识进程的一个非负整数

父进程号(PPID):

任何进程(除init进程)都是由另一个进程创建,该进程称为称为被创建的进程的父进程,对应的进程号为(PPID),如:A进程创建了B进程,A的进程号就是B进程的父进程号。

进程组号(PGID):

在这里插入图片描述

进程相关函数

  1. getpid() getppid() getpgid()
    在这里插入图片描述
    在这里插入图片描述
    子进程号会变,父进程号每次都一样(父进程就是命令解析器:bash),进程组(当前进程组中只有一个进程,所以进程组号就是进程号)

  2. 创建进程
    在这里插入图片描述
    在这里插入图片描述
    更准确来说,Linux 的 fork() 使用是通过写时拷贝 (copy- on-write) 实现。写时拷贝是一种可以推迟甚至避免拷贝数据的技术。内核此时并不复制整个进程的地址空间,而是让父子进程共享同一个地址空间。只用在需要写入的时候才会复制地址空间,从而使各个进行拥有各自的地址空间。也就是说,资源的复制是在需要写入的时候才会进行,在此之前,只有以只读方式共享。(注意:fork之后父子进程共享文件,fork产生的子进程与父进程相同的文件文件描述符指向相同的文件表,引用计数增加,共享文件文件偏移指针。)
    核心:
    写时拷贝,读时共享
    比如说,父进程子进程中都有num这个变量,那么不管是父进程还是子进程对num进行修改,子进程都会先拷贝num
    在这里插入图片描述
    上图,父进程num从10修改成了11,那么子进程事先拷贝了num,所以子进程num还是10

区分父子进程

父进程中没有接口能够获取子进程的PID
在这里插入图片描述
在这里插入图片描述
fork函数在子进程中返回0,在父进程中返回子进程PID
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值