UNIX 系统中的进程处理与控制
1. UNIX 系统的多任务特性
UNIX 操作系统以一些简单却强大的概念闻名,如标准输入输出、管道、文本过滤工具、树形文件系统等。它还是首个让用户能控制多个进程的小型计算机操作系统,这种能力被称为用户控制的多任务处理。
很多人可能觉得在命令行末尾加&让进程在后台运行很常见,也了解子 shell 的概念。接下来,我们将介绍 bash 中与多任务和进程处理相关的大部分特性,不过有些特性只有底层系统程序员才会感兴趣。
我们会先介绍识别和控制进程的基本方法,然后探讨进程间的通信方式,还会深入研究之前提到的管道和子 shell 等概念。这里不会涉及过多 UNIX 的底层技术细节,只提供必要的信息,若想了解更多,可以参考 UNIX 编程手册或相关书籍。强烈建议大家尝试文中的示例,涉及多进程的代码在纸上理解起来并不容易。
2. 进程 ID 和作业编号
在 UNIX 系统中,每个进程创建时都会被赋予一个编号,即进程 ID(Process ID)。当在命令末尾添加&让命令在后台运行时,shell 会给出类似如下的响应:
$ alice &[1] 93在这个例子中,93是alice进程的进程 ID,[1]是 shell 分配的作业编号(并非操作系统分配)。作业编号指的是当前在 shell 下运行的后台进程,而进程 ID 则涵盖了系统中所有用户的所有运行进程。