SETSID - Linux手册页

时间:2019-08-20 17:59:23  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2017-09-15

名称

setsid-创建会话并设置进程组ID

语法

#包括
#包括

pid_t setsid(void);

说明

如果调用进程不是进程组负责人,则setsid()将创建一个新会话。调用进程是新会话的领导者(即,其会话ID与进程ID相同)。调用进程也将成为会话中新进程组的进程组负责人(即,使其进程组ID与其进程ID相同)。

调用进程将是新进程组和新会话中的唯一进程。

最初,新会话没有控制终端。有关会话如何获取控制终端的详细信息,请参见凭据(7)。

返回值

成功后,将返回调用进程的(新)会话ID。发生错误时,将返回(pid_t)-1,并且将errno设置为指示错误。

错误说明

EPERM
任何进程的进程组ID等于调用进程的PID。因此,特别是,如果调用进程已经是进程组领导者,则setsid()将失败。

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4。

备注

通过fork(2)创建的子代继承其父代的会话ID。会话ID在execve(2)中保留。

进程组负责人是其进程组ID等于其PID的进程。禁止进程组负责人调用setid()可以防止进程组负责人将自己置于新会话中,而进程组中的其他进程仍保留在原始会话中。这种情况将打破会话和流程组的严格的两级层次结构。为了确保setsid()将成功,请调用fork(2)并使其具有父_exit(2),而子级(根据定义不能是进程组负责人)调用setsid()。

如果会话具有控制终端,并且未设置该终端的CLOCAL标志,并且发生了终端挂断,则向会话负责人发送SIGHUP信号。

如果作为会话领导者的进程终止,则将SIGHUP信号发送到控制终端的前台进程组中的每个进程。

另外参见

setsid(1),getsid(2),setpgid(2),setpgrp(2),tcgetsid(3),凭据(7),sched(7)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/