Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1747051
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-30 18:02:18

会话和进程组有几个其它的特性:


1、一个会话可以有单一的控制终端。这通常是在我们登录的终端设备(在一个终端登录的情况下)或者伪终端设备(在网络登录的情况下)。


2、会话领导建立控制终端的连接,并被称为控制进程。


3、一个会话里的进程组可以被分为单个前台进程组和一个或多个后台进程组。


4、如果一个会话有一个控制终端,那么它有单个前台进程组,而在这个会话里的所有其它进程组都是后台进程组。


5、每当我们输入终端的中断键(经常是DELETE或Control-C),这会导致中断信号发送给前台进程组的所有进程。


6、每当我们输入终端的退出键(经常是Control-backslach),这会导致退出信号发送给前台进程组的所有进程。


7、如果一个猫(或网络)连接断开被终端接口察觉,一个挂起信号被发送给控制进程(会话领导)。


在前一节提到的会话布局里:


1、会话里的登录外壳是在后台进程组里,它是会话领导,也是控制进程;


2、proc1和proc2在后台进程组里;


3、proc3、proc4和proc5在前台进程组里。


4、控制终端在猫断开时向登录外壳发送挂起信号;终端输入和终端产生的信号被发送给前台进程组(proc3、proc4和proc5)。


通常,我们不必担心控制终端。它在我们登录时会自动建立。


POSIX.1把分配一个控制终端的机制的选择留给了每个独立的实现。我们将在19.4看到真实的步骤。


UNIX系统V的后代在会话领导打开第一个还未与某个会话关联的终端设备时,为一个会话分配这个控制终端。这假定会话领导的open的调用没有指定O_NOCTTY标志(3.3节)。


基 于BSD的系统在会话领导使用TIOCSCTTY的请求参数(第三个参数为空指针)调用ioctl时,为一个会话分配这个控制终端。这个会话不能已经有一 个控制终端,才能成功。(一般,调用ioctl前会调用setsid,它会保证进程是一个没有控制终端的会话领导。)open里的POSIX.1的 O_NOCTTY标志没有被基于BSD的系统使用,除了在支持其它系统的兼容模式里。


有时一个程序想和控制终端通话,不管标准输入或标准输出是否被重定向。一个程序保证它正和控制终端通话的方法是打开谁的/dev/tty。这个特殊文件是内核里控制终端的同义词。自然地,如果程序没有一个控制终端,这个设备的open会失败。


经 典的例子是getpass函数,它读取一个密码(当然,终端输出被关闭)。这个函数被crypt程序调用,必可以在一个管道里使用。例如:crypt < tommy | lpr解密文件tommy并把输出用管道传输到打印假脱机程序(print spooler)。因为crypt在它的标准输入上读取它的输入文件,所以标准输入不能用来输入密码。还有,crypt被设计为我们必须在每次运行程序时 输入加密密码,来避免我们在一个文件里保存密码(这是一个安全漏洞)。


有几种熟知的方法来破坏crypt程序使用的编码。

阅读(1196) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~