【linux系列知识】进程

这一生的挚爱 提交于 2020-01-13 04:01:09

进程

目录

进程

1、简单介绍

2、进程的状态切换 

3、PCB进程控制块

4、孤儿进程和僵尸进程

5、进程间通信方式

pipe

FIFO通信

mmap

信号

6、守护进程(脱离终端)

1、简单介绍

通俗讲,编译好的二进制程序是程序,例如a.out;运行着的程序是进程。

程序员角度:运行一系列指令的过程

操作系统角度:分配系统资源的基本单位

区别:程序占用磁盘,不占用系统资源(内存占用系统资源,CPU、内核);一个程序对应多个进程,一个进程对应一个程序;程序没有生存周期,进程有生存周期

2、进程的状态切换 

 

3、PCB进程控制块

  • 进程ID:用于区别进程
  • 进程的状态:就绪、运行、挂起、终止
  • 进程切换时需要保存和恢复的一些CPU寄存器
  • 描述虚拟地址空间的信息:虚拟地址和物理地址的对于关系
  • 描述控制终端的信息:如xshell打开两个终端连接同一个linux主机,在两个终端中执行同一个程序,这个终端的信息都分别存在PCB中
  • 当前工作目录
  • umask掩码:保护文件创建和修改的权限
  • 文件描述符
  • 和信号相关的信息
  • 用户id和组id
  • 会话和进程组
  • 进程可以使用的资源上限

使用命令ulimit -a可以查看

4、孤儿进程和僵尸进程

孤儿进程:父亲死了,子进程被init进程领养

僵尸进程:子进程死了,父进程没有回收子进程的资源(回收:杀死父亲,被init领养,由init进程负责回收)

5、进程间通信方式

  1. pipe管道——最简单(有血缘关系)
  2. fifo有名管道 
  3. mmap文件映射共享IO——速度最快
  4. 本地socket——最稳定
  5. 信号:携带信息量小
  6. 共享内存
  7. 消息队列

pipe

 

注:父进程认为还有写端存在,就有可能还要写数据,所以会处于等待状态。如果是写则关闭读端,如果是读则关闭写端。 

总结:优点:简单;缺点:只能有血缘关系的通信,只能一个方向通信,若需要双向通信,则需要创建多根管道。

FIFO通信

无血缘关系间通信

    内核会针对fifo文件开辟一个缓冲区,操作fifio文件(就是文件读写),可以操作缓冲区,实现进程间通信。

mmap

信号

  • 特点:简单,不携带大量信息
  • 机制:进程B发送给进程A,内核产生信号,内核处理
  • 产生:按键——ctrl+c/z/\;调用函数;定时器;命令;硬件异常、段错误、浮点型错误、总线错误
  • 状态:产生——递达——未决
  • 默认处理方式:忽略、执行默认动作、捕获
  • 4要素:编号、事件、名称、默认处理动作(忽略、终止、暂停、继续)

6、守护进程(脱离终端)

进程组:多个进程在同一个组,第一个进程默认是进程组的组长

会话:进程组的更高一级,多个进程组对应一个会话

创建会话的步骤:创建子进程,父进程死去,子进程自当会长

守护进程的步骤:fork,父进程退出——子进程当会长——执行核心逻辑

nohup忽略,也可以做到创建守护进程。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!