setsid() - セッションの作成、プロセス・グループ ID の設定

標準

標準/拡張機能 C/C++ 依存項目

POSIX.1
XPG4
XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _POSIX_SOURCE
#include <unistd.h>

pid_t setsid(void);

機能説明

呼び出しプロセスをセッション・リーダーとして使用して、新規セッションを作成します。呼び出し元が、新規プロセス・グループのプロセス・グループ・リーダー になります。呼び出しプロセスが既に、プロセス・グループ・リーダー ではないことが必要です。呼び出し元には制御端末がありません。

新規プロセス・グループのプロセス・グループ ID (PGID) は、呼び出し元のプロセス ID (PID) と等しくなっています。呼び出し元は、新規プロセス・グループおよび新規セッションの 唯一のプロセスとして開始されます。

戻り値

正常に実行された場合、setsid() は、呼び出し元の新規 PGID の値を戻します。

正常に実行されなかった場合、setsid() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EPERM
次のエラー条件のいずれかが存在しています。
  • 呼び出し元が、プロセス・グループ・リーダーです。
  • 呼び出し元の PID が、他のプロセスの PGID に一致しています。

CELEBS10
⁄* CELEBS10

   This example creates a new session.

 *⁄
#define _POSIX_SOURCE
#include <unistd.h>
#include <sys⁄types.h>
#include <stdio.h>

main() {
  pid_t pid;
  int p[2];
  char c='?';

  if (pipe(p) != 0)
    perror("pipe() error");
  else
    if ((pid = fork()) == 0) {
      printf("child's process group id is %d¥n", (int) getpgrp());
      write(p[1], &c, 1);
      setsid();
      printf("child's process group id is now %d¥n", (int) getpgrp());
      exit(0);
    }
    else {
      printf("parent's process group id is %d¥n", (int) getpgrp());
      read(p[0], &c, 1);
      sleep(5);
    }
}
出力:
child's process group id is 262152
child's process group id is now 262150
parent's process group id is 262152

関連情報