博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程关系之作业控制
阅读量:5301 次
发布时间:2019-06-14

本文共 1235 字,大约阅读时间需要 4 分钟。

作业控制,它允许在一个终端上启动多个作业(进程组),它控制哪一个作业可以访问该终端,以及哪些作业在后台运行。作业控制要求下面三种形式的支持:

(1)支持作业控制的shell。

(2)内核中的终端驱动程序必须支持作业控制。

(3)内核必须提供对某些作业控制信号的支持。

从shell使用作业控制功能角度讲,用户可以在前台或后台启动一个作业。一个作业只是几个进程的集合,通常是一个进程的管道线。例如:

vi main.c

在前台启动了只有一个进程组成的一个作业。命令:

pr *.c | lpr &

make all &

在后台启动了两个作业。这两个后台作业调用的所有进程都在后台运行。

当启动一个后台作业时,shell赋予它一个作业标识,并打印一个或几个进程ID。

我们可以键入一个影响前台作业的特殊字符——挂起键(一般采用Ctrl+Z)与终端驱动程序进行交互。键入此字符使终端驱动程序将信号SIGTSTP送至前台进程组中的所有进程,后台进程组作业则不受影响。实际上有下面三个特殊字符可使终端驱动程序产生信号,并将它们送至前台进程组:

中断字符(一般采用DELETE或Ctrl+C)产生SIGINT。

退出字符(一般采用Ctrl+\)产生SIGQUIT。

挂起字符(一般采用Ctrl+Z)产生SIGTSTP。

终端驱动程序必须处理与作业控制有关的另一种情况。我们可以有一个前台作业和若干个后台作业,这些作业中哪一个接受我们在终端上键入的字符呢?只有前台作业接收终端输入如果后台作业试图读终端,那么这并不是一个错误,但是终端驱动程序将检测这种情况,并且向后台作业发送一个特定的信号SIGTTIN。该信号通常会暂时停止此后台作业,而shell则向有关用户发出这种情况的通知,然后用户就可以用shell命令将此作业转为前台作业运行,于是它就可以读终端

如果后台作业输出到控制终端又将发生什么呢?这是一个我们可以允许或禁止的选项。通常,可以用stty(1)命令改变这一选项。在用户禁止后台作业写到控制终端时(使用命令stty tostop(关于stty命令用法:http://micalli.blog.51cto.com/509064/640729)),如果后台作业输出到控制终端,终端驱动程序将该写操作标识为来自于后台进程,并向该作业发送SIGTTOU信号。

 

终端I/O和终端产生的信号总是从前台进程组连接到实际终端。

 

进程属于一个进程组,而进程组属于一个会话。会话可能有也可能没有控制终端。如果它确实有一个控制终端,则此终端设备知道其前台进程的进程组ID。这个值可以用tcsetpgrp函数在终端驱动程序中设置。前台进程组ID是终端的一个属性,而不是进程的属性。

 

本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:

转载于:https://www.cnblogs.com/nufangrensheng/p/3513756.html

你可能感兴趣的文章
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
数据分析-业务知识
查看>>
nodejs vs python
查看>>
poj-1410 Intersection
查看>>
Java多线程基础(一)
查看>>
TCP粘包拆包问题
查看>>
Java中Runnable和Thread的区别
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
POJ 1015 Jury Compromise(双塔dp)
查看>>
论三星输入法的好坏
查看>>
Linux 终端连接工具 XShell v6.0.01 企业便携版
查看>>
JS写一个简单日历
查看>>
LCA的两种求法
查看>>
Python 发 邮件
查看>>
mysql忘记密码的解决办法
查看>>
全面分析Java的垃圾回收机制2
查看>>
[Code Festival 2017 qual A] C: Palindromic Matrix
查看>>