控制终端和会话还有一些特性
1.一个会话可以有一个控制终端,通常会话的第一个进程打开一个终端(终端设备或伪终端设备)后,该终端就成为该会话的控制终端。
2.建立与控制终端连接的会话首进程被称为控制进程。(controlling process)
3.一个会话中的几个进程组可被分成一个前台进程组以及一个或者多个后台进程组。
4.如果一个会话有一个控制终端,则它有一个前台进程组,会话中的其他进程组则为后台进程组。
5.无论何时进入终端的中断键(ctrl+c)或退出键(ctrl+\),就会将中断信号发送给前台进程组的所有进程。
6.如果终端接口检测到调制解调器(或网络)已经断开,则将挂断信号发送给控制进程(会话首进程)。
需要有一种方法通知内核哪一个进程组是前台进程组
#include <unistd.h>
pid_t tcgetpgrp(int filedes); //返回值:若成功则返回前台进程组的进程组ID,出错则返回-1.
int tcsetpgrp(int filedes, pid_t pgrpid); //返回值:成功则返回0,出错则返回-1.
通过tcgetsid函数,应用程序就能获取会话首进程的进程组ID。
#include <termios.h>
pid_t tcgetsid(int fd);
//成功返回会话首进程的进程组ID,出错返回-1