第 3 章 Unix/Linux进程管理
一、知识点归纳
多任务处理
- 同时进行几项独立活动的能力
- 通过在不同任务之间多路复用CPU的执行时间来实现,即将CPU执行操作从一个任务切换到另一个任务
- “并发”
- 所有操作系统的基础
- 并行编程的基础
进程的概念
- 进程是对映像的执行。
- PROC结构体
Unix/Linux中的进程
- 进程来源
- INIT和守护进程
- 登录进程
- 文件流
- FILE结构体
- sh进程
- 进程的执行模式
- 内核模式(kmode)
- 每个进程都在Kmode下产生并开始运行
- 在Kmode下,进程的Kcode、Kdata和Kheap都相同
- 通过将CPU的状态寄存器从K模式更改为U模式,可轻松切换到Umode
- 用户模式(Umode)
- 进程在Umode下的映像都不相同
- 只能通过三种方式进入Kmode:
- 中断
- 陷阱
- 系统调用
- 内核模式(kmode)
进程管理的系统调用
- fork()
- 创建子进程并返回子进程的pid,如果失败则返回-1
- kfork()
- 内核中相应的函数
- 允许子进程继承父进程打开的所有文件
- 进程执行顺序
在fork()完成后,子进程与父进程和系统中所有其他进程竞争CPU运行时间。接下来,运行哪个程序取决于它们的调度优先级,优先级呈动态变化。 - 进程终止
- 正常终止
- 异常终止
- 等待子进程终止
- Linux中的subreaper进程
- exec():更改进程执行映像
- 环境变量
- 为当前sh定义的变量,由子sh或进程继承
- 可使用env或printenv命令查看环境变量
- 一些重要的环境变量:
- SHELL
- TERM
- USER
- PATH
- HOME
I/O重定向
- 文件流和文件描述符
- 每个文件流对应Linux内核中的一个打开文件
- 每个打开文件都用一个文件描述符(数字)表示
- 文件流I/O和系统调用
- 重定向标准输入
- 重定向标准输出
管道
- 管道是用于进程交换数据的单向进程间的通信通道
- 在双向管道上,数据可以双向传输
- 普通管道用于相关进程
- 命名管道是不相关进程之间的FIFO通信通道
- Unix/Linux中的管道编程
- 管道命令处理
- 将管道写进程与管道读进程连接起来
- 命名管道(FIFO)
二、ChatGPT