APUE编程:110---进程管理(作业控制:SIGTTIN、SIGTTOU信号)

    xiaoxiao2022-07-13  134

    一、作业的概念

    一个进程组就是一个作业,是一些进程的集合,通常是一个进程管道

    二、作业控制的3种形式

    支持作业控制的shell内核中的终端驱动程序必须支持作业控制必须提供对某些作业控制信号的支持

    三、不同系统对作业的支持情况

    四、作业标识符

    参考:https://blog.csdn.net/qq_41453285/article/details/88357358

    五、信号处理

    可以键入下面的信号发送给作业

    中断字符(一般采用DELETE或Ctrl-C)产生SIGINT信号退出字符(一般采用Ctrl-\)产生SIGQUIT信号挂起字符(一般采用Ctrl-Z)产生SIGTSTP信号

    注意事项:

    因为终端驱动程序有一个前台作业和若干个后台作业。当我们在终端输入上面那个信号处理字符时,只有前台作业才会接受

    六、SIGTTIN信号

    因为只有前台进程才可以接受终端的输入,如果后台作业试图读终端,终端驱动程序检测这种情况,并且发送一个特定信号SIGTTIN给后台作业,该信号会停止此后台作业,而shell则向有关用户发出这种情况的通知

    演示案例

    第一步:从标准输入读取数据,然后重定向到temp.foo文件中。但是我们选择将此任务丢到后台运行(变为后台作业)

    当我们再次按下回车之后,可以看到后台任务变为Stopped状态,并且将信息通知到控制台中

    第二步:我们使用fg命令将任务拿到前台运行,并且输入内容。查看temp.foo文件的内容

    七、SIGTTOU信号

    后台作业如果有标准输出,那么默认标准输出会显示到前台的终端上。我们也可以通过流重定向到别处如果我们不希望后台进程有标准输出,则可以使用stty命令禁止后台作业向终端输出。如果有后台作业向终端输出,就会向该作业发送SIGTTOU信号,此时此作业就会处于阻塞状态(Stopped)

    演示案例

    ①我们没有使用stty命令,则后台任务有标准输出就会打印到终端上

    ②使用stty命令,禁止后台作业输出到控制终端。之后再cat文件,发现任务已经被Stopped了

    八、作业控制总结

    最新回复(0)