#include
pid_t setsid(void)
调用此函数的进程不是一个进程组的组长,则此函数创建一个新会话
1)该进程成为会话首进程,会话首进程是创建该会话的进程,此时为新会话中唯一进程
2)该进程成为一个进程组组长。进程组ID为调用进程ID
3)该进程没有控制终端
#inlclude
pid_t getsid(pid_t pid)//如果pid是0,则返回调用进程的会话首进程组ID。
控制终端
1)一个会话一个控制终端。一般为登录到其上的设备或者伪终端(网络登录)
2)建立与控制短链接的会话首进程为控制进程
3)一个会话中的几个进程可被分成前台进程组,以及一个或几个后台进程组
4)如果一个会话有一个控制端,则它有一个前台,进程组,会话中的其他进程为后台进程组
5)无论何时从终端键入中断键,就会将中断信号发送给前台进程组的所有进程
6)无论何时键入终端的退出键,就会将推出信号发送给前台进程组的所有进程
7)如果终端接口检测到调制解调器已经断开链接,则将挂断信号发送给控制进程会话。
#include
pid_t tcgetpgrp(int filedes)//成功返回前台进程组ID,错误返回-1
int tcsetpgrp(int filedes,pid_t pgrpid)//成功返回0,失败-1
作业控制
作业控制也允许在一个终端上启动多个作业,控制哪个作业可以访问终端,以及哪些作业在后台运行
1)支持作业控制的shell
2)内核中的终端驱动程序必须支持作业控制
3)内核必须提供对某些作业控制信号的支持。
阅读(715) | 评论(0) | 转发(0) |