kazmax - Linux で自宅サーバー

setpgid - システムコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. 準拠
  7. 注意
  8. 関連項目

名前

setpgid, getpgid, setpgrp, getpgrp - プロセス・グループの設定/取得を行う

書式

#include <unistd.h>
int setpgid(pid_t pid , pid_t pgid );
pid_t getpgid(pid_t pid );
int setpgrp(void);
pid_t getpgrp(void);

説明

setpgid ()は pid で指定したプロセスのプロセス・グループID に pgid を設定する。 pid がゼロならば、呼び出したプロセスのプロセスID が pid として使用される。 pgid がゼロならば、 pid で指定されたプロセスのプロセスID が pgid として使用される。 setpgid () をプロセスをあるプロセス・グループから別のグループへ 移動するために使用する場合は(一部のシェルはパイプラインを生成 する時にこれを行う)、両方のプロセス・グループは同じセッションの 一部でなければならない。この場合は pgid は参加すべき既存の プロセス・グループを指定し、そのセッション ID は参加するプロセスの セッション ID に一致しなければならない。
getpgid ()は pid で指定されたプロセスのプロセス・グループID を返す。 pid がゼロならば、呼び出したプロセスのプロセスID が pid として使用される。
setpgrp ()呼び出しは setpgid(0,0) と等価である。
同様に、 getpgrp ()は getpgid(0) に等しい。 各プロセス・グループはセッションのメンバーであり、各プロセスは そのプロセス・グループがメンバーであるセッションのメンバーである。
プロセス・グループはシグナルを配送する時や、端末(terminal)によって 入力の要求を調停(arbitrate)する時に使用される: 端末と同じプロセス・グループID を持つプロセスはフォアグランド として読み込みを行うことができ、その他のプロセスが端末から読み込みを 行なおうとした場合、シグナルによって中断(block)させられる。 これらのコールは csh (1)のようなプログラムによって、ジョブ・コントロール(job control)の 実装の際にプロセス・グループを作成するために使用される。   termios (3) に記述されている TIOCGPGRPTIOCSPGRP コールは制御端末のプロセス・グループを取得/設定するのに使用する。
もしセッションが制御端末を持っていて、CLOCAL が設定されておらず、 ハングアップが起きた場合、セッション・リーダーに SIGHUP が送られる。 セッション・リーダーが終了した場合にはその制御端末のフォアグランドの プロセス・グループに所属する全てのプロセスに SIGHUP シグナルが送られる。
プロセスの終了によってプロセス・グループが孤児になった場合で、 もし新たに孤児になったプロセス・グループのメンバーが停止すると、 新たに孤児になったプロセス・グループの全てのプロセスに SIGHUP シグナルに 続けて SIGCONT シグナルが送られる。

返り値

setpgid ()と setpgrp ()は成功した場合、ゼロを返す。エラーの場合は -1 を返し、 errno が適切に設定される。
getpgid ()は成功した場合プロセス・グループを返す。 エラーの場合は -1 を返し、 errno が適切に設定される。
getpgrp ()は常に現在のプロセスのプロセス・グループを返す。

エラー

EACCES
呼び出し元プロセスの子プロセスのプロセス・グループ ID を変更しようとしたが、 すでにその子プロセスは execve () を実行していた。 (setpgid (), setpgrp ())
EINVAL
pgid が 0 より小さい。(setpgid (), setpgrp ())
EPERM
プロセスを異なるセッションのプロセス・グループに移動させようとした。 または呼び出し元プロセスの子プロセスのプロセス・グループ ID を変更しようと したが、その子プロセスは別のセッションだった。 またはセッションリーダーのプロセス・グループ ID を変更しようとした。 (setpgid (), setpgrp ())
ESRCH
getpgid ()の場合: pid がどのプロセスにも一致しない。 setpgid ()の場合: pid がカレントプロセスではなく、カレントプロセスの子プロセスでもない。

準拠

setpgid ()関数と getpgrp ()関数は POSIX.1-2001 に準拠している。 setpgrp ()関数は 4.2BSD に由来する。 getpgid ()関数は SVr4 に準拠している。

注意

  fork (2) で作成された子プロセスは、親プロセスのプロセス・グループID を継承する。   execve (2) の前後でプロセス・グループID は保存される。
POSIX の setpgid ()は BSD の setpgrp ()関数からきている。また System V にも同じ名前の関数があるが、これは   setsid (2) と同じものである。

glibc でプロトタイプを得るためには、_XOPEN_SOURCE と _XOPEN_SOURCE_EXTENDED を両方とも 定義するか、"#define _XOPEN_SOURCE n " を用いる。 ここで n は 500 以上の整数である。

関連項目