名 前
setsid − セ ッ シ ョ ン (session) を 作 成 し 、 プ ロ セ ス グ ル ー プ ID を 設 定 す る
書 式
#include <unistd.h>
pid_t setsid(void);
説 明
setsid() は 、 呼 び 出 し た プ ロ セ ス が プ ロ セ ス グ ル ー プ リ ー ダ ー (process group leader) で な け れ ば 、 新 し い セ ッ シ ョ ン を 作 成 す る 。 呼 び 出 し た プ ロ セ ス は 、 新 し い セ ッ シ ョ ン の リ ー ダ ー と な る (す な わ ち 、 そ の セ ッ シ ョ ン ID が プ ロ セ ス ID と 同 じ 値 に な る )。 ま た 、 呼 び 出 し た プ ロ セ ス は 、 そ の セ ッ シ ョ ン の 新 し い プ ロ セ ス グ ル ー プ の プ ロ セ ス グ ル ー プ リ ー ダ ー に も な る (す な わ ち 、 プ ロ セ ス グ ル ー プ ID が プ ロ セ ス ID と 同 じ 値 に な る )。 呼 び 出 し た プ ロ セ ス は 、 新 し い プ ロ セ ス グ ル ー プ と 新 し い セ ッ シ ョ ン の 唯 一 の プ ロ セ ス と な る 。 新 し い セ ッ シ ョ ン は 制 御 端 末 を 持 た な い 。
返 り 値
成 功 す る と 、 呼 び 出 し た プ ロ セ ス の (新 し い ) セ ッ シ ョ ン ID が 返 さ れ る 。 エ ラ ー の 場 合 は 、 (pid_t) −1 が 返 さ れ 、 errno に エ ラ ー を 示 す 値 が 設 定 さ れ る 。
エ ラ ー
EPERM い ず れ か の プ ロ セ ス の プ ロ セ ス グ ル ー プ |
ID が 、 呼 び 出 し た プ ロ セ ス |
の PID と 等 し い 。 こ れ は 、 呼 び 出 し た プ ロ セ ス が 既 に プ ロ セ ス リ ー ダ ー の 場 合 に は setsid() は 失 敗 す る こ と を 意 味 す る 。
準 拠
SVr4, POSIX.1−2001.
注 意
fork(2) で 作 成 さ れ た 子 プ ロ セ ス は 、 親 プ ロ セ ス の セ ッ シ ョ ン ID を 継 承 す る 。 execve(2) の 前 後 で セ ッ シ ョ ン ID は 保 存 さ れ る 。 プ ロ セ ス グ ル ー プ リ ー ダ ー は 、 プ ロ セ ス グ ル ー プ ID が そ の PID と 同 じ 値 の プ ロ セ ス で あ る 。 プ ロ セ ス グ ル ー プ リ ー ダ ー が setsid() を 呼 び 出 す こ と を 許 可 し な い と 、 そ の プ ロ セ ス グ ル ー プ 内 の 他 の プ ロ セ ス を 元 の セ ッ シ ョ ン に 残 し た ま ま 、 プ ロ セ ス グ ル ー プ リ ー ダ ー が 自 分 自 身 を 新 し い セ ッ シ ョ ン に 入 れ る と い う こ と が で き な く な る 。 こ の よ う な シ ナ リ オ は 、 セ ッ シ ョ ン と プ ロ セ ス グ ル ー プ と い う 厳 密 な 2 階 層 モ デ ル を 壊 す こ と に な る 。 setsid() が 成 功 す る こ と を 保 証 す る に は 、 fork(2) と _exit(2) を 行 い 、 そ の 子 プ ロ セ ス に setsid() を さ せ れ ば よ い 。
関 連 項 目
setsid(1), getsid(2), setpgid(2), setpgrp(2), tcgetsid(3), credentials(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。