Linux 多进程编程基础
本文将对Linux下多进程编程进行介绍。
进程的概念
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。通俗点讲,进程是一段程序的执行过程,是个动态概念。
进程的创建
进程的产生有多种方式,基本过程:
- 首先复制其父进程的环境配置
- 在内核中建立进程结构
- 将结构插入到进程列表
- 分配资源给此进程
- 复制父进程的内存映射信息
- 管理文件描述符和链接点
- 通知父进程
进程的状态

程序运行必须加载在内存中,当有过多的就绪态或阻塞态进程在内存中没有运行,因为内存很小,有可能不足。系统需要把他们移动到内存外磁盘中,称为挂起状态。就绪状态的进程挂起就是挂起就绪状态,阻塞进程挂起就称为阻塞挂起状态。
进程的调度
每个进程的产生都有自己的唯一的ID号(pid),并且附带有一个它父进程的ID号(ppid)。进程死亡时,ID被回收。
进程间靠优先级获得CPU资源,时间片段轮换来更新优先级,以保证不会一个进程占据CPU时间过长。每个进程都得到轮换运行,因为这个时间非常短,所以给我们就好像是系统在同时运行好多进程。
进程的死亡
进程终止有两种方式:
- 主动终止
- 从main函数返回,链接程序会自动添加对exit的系统调用
- 主动调用exit系统调用(包括exit/_exit/abort)
- 被动终止
- 收到一个自己不能处理的信号
- 在内核态执行时产生了一个异常
- 收到SIGKILL等终止信号
孤儿进程与僵尸进程
进程间通信
参考进程间通信

浙公网安备 33010602011771号