Linux系统上所有运行的任务都可以称之为一个进程,每个用户任务、每个系统管理守护进程,也都可以称之为进程。Linux用分时管理方法使所有的任务共同分享系统资源。我们所关心的是如何去控制这些进程,让它们能够很好地为用户服务。
进程的一个比较正式的定义是:在自身的虚拟地址空间运行的一个单独的程序。进程与程序是有区别的,进程不是程序,虽然它由程序产生。程序只是一个静态的命令集合,不占系统的运行资源;而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。
Linux系统中所有进程都是相互联系的。除了初始化进程外,所有进程都有一个父进程。新进程不是被创建,而是被复制,或者从以前的进程复制而来。Linux系统中所有的进程都是由一个进程号为1的init进程衍生而来的。而我们在Shell下执行程序启动的进程则是Shell进程的子进程,当然我们启动的进程可以再启动自己的子进程。这样形成了一棵进程树,每个进程都是树中的一个节点,其中树的根是init。
进程和作业的概念也有区别。一个正在执行的进程称为一个作业,而作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令的时候。
作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。Shell将记录所有启动的进程情况,在每个进程过程中,用户可以任意地挂起进程或重新启动进程。作业控制是许多Shell(包括bash和tcsh)的一个特性,使用户能在多个独立作业间进行切换。
例如,当用户编辑一个文字文件,并需要中止做其他事情时,利用作业控制,用户可以让编辑器暂时挂起,返回Shell提示符开始做其他的事情。其他事情做完以后,用户可以重新启动挂起的编辑器,返回到刚才中止的地方,就像用户从来没有离开编辑器一样。这只是一个例子,作业控制还有许多其他实际的用途。