UNIX 进程:概念、操作与特殊进程解析
1. 执行命令时发生了什么
在 UNIX 系统中执行程序时,系统会为该程序创建一个特殊的环境。这个环境包含了系统运行该程序所需的一切,就好像系统中没有其他程序在运行一样。
2. 进程分叉(Forking a Process)
每个进程都有其独特的进程上下文,包含以下内容:
- 正在运行的文本(程序指令)
- 程序使用的内存
- 当前工作目录
- 打开的文件及其在文件中的位置
- 资源限制
- 访问控制信息
- 其他各种底层信息
每次执行程序时,UNIX 系统会进行分叉操作,具体步骤如下:
1. 分配进程表槽位 :UNIX 会在进程表中为新进程分配一个槽位,进程表是 UNIX 维护的当前运行程序列表。不过,分配可能会因以下原因失败:
- 超过用户进程限制,即达到了 UNIX 系统允许用户运行的最大进程数。
- 系统没有可用的进程槽位,因为 UNIX 内核将当前运行进程的信息存储在进程表中,当表满时无法再创建新进程。
- 系统内存不足,无法为新进程的文本和数据提供空间。
2. 分配唯一进程标识符(PID) :为新进程分配一个唯一的 PID,用于后续对进程的检查和控制。
3. 复制父进程上下文 :复制请求创建新进程的父进程的上下文。
4. 返回新 PID 给父进程 :使父进程能够直接检查或控制新进程。
分叉完成后,