SIMPLE SOLUTIONS

SETSID(2) - Linux manual

セッション (session) を作成し、プロセスグループ ID を設定する.

2014-12-31
SETSID(2) Linux Programmer's Manual SETSID(2)

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/ に書かれている。
Linux 2014-12-31 SETSID(2)
setsid(2).txt (日本語 / Japanese)
Index English version of setsid(2)
Go top