当前位置: 技术问答>linux和unix
控制终端如何转移
来源: 互联网 发布时间:2016-10-02
本文导语: 每个会话可以有一个控制终端,我有几个问题: 1. 用户登录后shell获得控制终端,据我所知从系统启动到用户登录完成shell所在进程先后执行了agetty、login、sh程序,而agetty负责打开终端,我不知道会话是什么时候创...
每个会话可以有一个控制终端,我有几个问题:
1. 用户登录后shell获得控制终端,据我所知从系统启动到用户登录完成shell所在进程先后执行了agetty、login、sh程序,而agetty负责打开终端,我不知道会话是什么时候创建的。我想应该是在agetty打开终端之前,是这样吗?否则创建会话的同时就会断开与终端的连接。
2. shell可以调用tcsetpgrp()函数将控制终端交给同会话中的其他进程组,但是但前台进程组结束后,shell如何重新获得控制终端呢?
3. 类似地,如果我正在用vi编辑文件,按ctrl+z就会停止vi并使shell称为前台。此时SIGTSTP信号是由vi进程来处理的,shell又是如何获得控制终端的呢?
1. 用户登录后shell获得控制终端,据我所知从系统启动到用户登录完成shell所在进程先后执行了agetty、login、sh程序,而agetty负责打开终端,我不知道会话是什么时候创建的。我想应该是在agetty打开终端之前,是这样吗?否则创建会话的同时就会断开与终端的连接。
2. shell可以调用tcsetpgrp()函数将控制终端交给同会话中的其他进程组,但是但前台进程组结束后,shell如何重新获得控制终端呢?
3. 类似地,如果我正在用vi编辑文件,按ctrl+z就会停止vi并使shell称为前台。此时SIGTSTP信号是由vi进程来处理的,shell又是如何获得控制终端的呢?
|
这些概念一直很模糊,lz研究的很细
1、应该是这样了。控制终端的分配是在会话创建之后
2、控制终端是属于整个会话的。对于shell而言,控制终端就是一个文件描述符,没有重新获得的说法
1、应该是这样了。控制终端的分配是在会话创建之后
2、控制终端是属于整个会话的。对于shell而言,控制终端就是一个文件描述符,没有重新获得的说法