前面我们学习了进程,线程,信号等相关内容,今天我们要引入一个新的概念——作业,那么什么是作业呢?当我们在Linux的shell中运行程序时,这个程序就可以看成是一个作业了,可以这么说shell控制的是作业,而不是进程,而且shell还可以分前后台对作业进行控制,所以,今天我们就来谈一谈Linux下面的作业控制。
什么是进程组
要弄明白作业这个概念,首先我们必须要了解进程组,那么什么是进程组呢?
熟悉Linux的应该都知道,进程不光有进程pid,它还属于一个专门的进程组,其中进程组id在Linux下被称为PGID,如果进程的id等于该进程的进程组的组id,那么这个进程被称为组长进程。但是组长进程和进程的生命周期是没有关系的,另外,当一个进程创建一个进程组时,那么创建进程组的这个进程就是组长进程;最后,进程的生命周期之和进程组中的最后一个进程有关。
还有一点就是,在shell下,我们通过shell控制的是作业或者进程组,而不是进程。
如上图,当我们在shell下运行一个程序时,这个程序成为了进程,由于当前shell下运行的进程只有一个,所以这个进程就自己创建了进程组并成为组长。
当我们在shell下运行多个进程时,一般第一个进程会被作为组长进程。
什么是作业
谈完了进程组,现在我们来谈一谈什么是作业?前面提到,shell分前后台控制的不是进程,而是作业或者进程组,一个前台只能运行一个