Linux学习之系统编程篇:PCB( 进程控制块)、进程状态、转换和控制

本文详细介绍了进程控制块(PCB)的组成,包括进程状态、CPU寄存器、虚拟地址空间等关键属性,并阐述了进程的五种状态及其转换。此外,还讲解了fork()函数在创建父子进程中的作用,以及如何通过getpid()和getppid()获取进程ID。通过对进程状态和控制的深入理解,有助于更好地掌握操作系统中的进程管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、PCB

PCB 本质是一个超大的结构体
PCB 结构体中重要属性:
(1) 进程 pid :进程的唯一编号,类型 pid_t,无符号整形。
(2) 进程状态:就绪、运行、挂起、停止。
(3) CPU 寄存器:进程只能短时间的占有 CPU,它用于进程切换时候保存和恢复进程的执行进度。
(4) 描述虚拟地址空间的信息:每启动一个进程,就会对应一个虚拟地址空间(理论值 0 - 4G) 。
(5) 描述控制终端的信息。
(6) 当前工作目录。
(7) umask 掩码:默认 0002,每一进程都有自己的 umask 掩码。
(8) 文件描述符表。
(9) 和信号相关的信息。
(10) 用户 id 和组 id。
(11) 进程组和会话:多个进程构成一个进程组,多个进程组构成一个会话。
(12) 进程可以使用的资源上限:比如文件描述符的最大个数、管道和栈的默认缓存区上限等。

二、进程状态及其转换

进程有 5 种状态:初始态、就绪态、运行态、挂起态、终止态 。
5 种进程状态的转换:
在这里插入图片描述

三、进程控制(父子进程机制)

函数:

pid_t  fork(void) //返回值类型 pid_t (本质是无符号整形)

此函数的作用是用于创建一个子进程(拷贝父进程)。
父进程与子进程虚拟地址空间内核区中 PCB 中的 pid(进程 ID)不同,其余都相同,所以设计的时候有两个返回值。
返回值:
成功:父进程返回子进程的 pid、子进程返回 0。
失败:都返回 -1 。
形式: 同一段代码,父子进程都在运行,如下图:
在这里插入图片描述
fork() 后,代码段 1 只有父进程执行,代码段 2 父子都执行,父子进程的执行顺序是谁先占CPU谁先执行,但可以通过 sleep 控制先后顺序。
注意:getpid() 用于得到当前进程的 pid ;
getppid() 用于得到当前进程的父进程 pid。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值