作业控制

作业控制
作业控制是POSIX标准化的特征之一,同时被众多标准支持。
它允许多个作业在一个终端上运行,每个作业是一个或一组由管道所连接的进程。作业控制机制提供了作业在前台和后台之间切换的方法,可以放置后台终端对作业的访问。
每个执行一组进程的活动终端为一个会话,每个会话由进程组组成,每个进程组包含有一个或多个相互独立的进程。
会话中有一个进程组是前台进程组,其余的进程组都是后台进程组。


进程的状态:
每个进程都有三种状态:运行状态 停止状态 死锁状态。
当一个进程处于运行状态,我们可以通过在进程中调用exit 或进程接收到一个系统信号而使进程终止运行(进程在各种状态之间切换是由于收到其他进程 系统内核 自身产生的信号而导致进程的状态发生变化)。
例:当一个进程接收到SIGCONT信号时,内核将进程由停止状态转变为运行状态;如果进程已经处于运行状态,那么当前进程的状态就不发生变化。


停止进程:
有四种信号可以将处于运行状态的进程转换成停止状态。
1 SIGSTOP:此信号不是由内核产生,它提供了一种用户可以停止任意进程的手段,此信号不能被忽略和捕获.
2 SIGTSTP: 当用户按终端挂起键时,这个信号就会把前台进程组中的每一个进程发送给终端。
3 SIGTTIN:当一个后台进程试图从终端读取数据时就会收到SIGTTIN信号。
4 SIGTTOU:当一个后台进程想向其终端写入数据时,就会产生这个信号,只有在终端的TOSTOP属性已经设置以后,这个信号才会产生。


处理作业控制信号
虽然进程的终止和启动可以通过信号很容易的就完成相关操作,但是有些进程是需要做特殊处理
例:
1 在进程重新启动时,需保留以前的状态。
2 进程被挂起之前需要完成某些任务,这就必须为信号提供一个信号处理函数


作业控制主要讲述进程中对信号的处理。

相关阅读:
linux c 信号简介