进程
目录
1、简单介绍
通俗讲,编译好的二进制程序是程序,例如a.out;运行着的程序是进程。
程序员角度:运行一系列指令的过程
操作系统角度:分配系统资源的基本单位
区别:程序占用磁盘,不占用系统资源(内存占用系统资源,CPU、内核);一个程序对应多个进程,一个进程对应一个程序;程序没有生存周期,进程有生存周期
2、进程的状态切换
3、PCB进程控制块
- 进程ID:用于区别进程
- 进程的状态:就绪、运行、挂起、终止
- 进程切换时需要保存和恢复的一些CPU寄存器
- 描述虚拟地址空间的信息:虚拟地址和物理地址的对于关系
- 描述控制终端的信息:如xshell打开两个终端连接同一个linux主机,在两个终端中执行同一个程序,这个终端的信息都分别存在PCB中
- 当前工作目录
- umask掩码:保护文件创建和修改的权限
- 文件描述符
- 和信号相关的信息
- 用户id和组id
- 会话和进程组
- 进程可以使用的资源上限
使用命令ulimit -a可以查看
4、孤儿进程和僵尸进程
孤儿进程:父亲死了,子进程被init进程领养
僵尸进程:子进程死了,父进程没有回收子进程的资源(回收:杀死父亲,被init领养,由init进程负责回收)
5、进程间通信方式
- pipe管道——最简单(有血缘关系)
- fifo有名管道
- mmap文件映射共享IO——速度最快
- 本地socket——最稳定
- 信号:携带信息量小
- 共享内存
- 消息队列
pipe
注:父进程认为还有写端存在,就有可能还要写数据,所以会处于等待状态。如果是写则关闭读端,如果是读则关闭写端。
总结:优点:简单;缺点:只能有血缘关系的通信,只能一个方向通信,若需要双向通信,则需要创建多根管道。
FIFO通信
无血缘关系间通信
内核会针对fifo文件开辟一个缓冲区,操作fifio文件(就是文件读写),可以操作缓冲区,实现进程间通信。
mmap
信号
- 特点:简单,不携带大量信息
- 机制:进程B发送给进程A,内核产生信号,内核处理
- 产生:按键——ctrl+c/z/\;调用函数;定时器;命令;硬件异常、段错误、浮点型错误、总线错误
- 状态:产生——递达——未决
- 默认处理方式:忽略、执行默认动作、捕获
- 4要素:编号、事件、名称、默认处理动作(忽略、终止、暂停、继续)
6、守护进程(脱离终端)
进程组:多个进程在同一个组,第一个进程默认是进程组的组长
会话:进程组的更高一级,多个进程组对应一个会话
创建会话的步骤:创建子进程,父进程死去,子进程自当会长
守护进程的步骤:fork,父进程退出——子进程当会长——执行核心逻辑
nohup忽略,也可以做到创建守护进程。
来源:CSDN
作者:烊萌
链接:https://blog.csdn.net/qq_36417014/article/details/103830745