setpgid - システムコールの説明 - Linux コマンド集 一覧表
名前
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) に記述されている
TIOCGPGRP
と
TIOCSPGRP
コールは制御端末のプロセス・グループを取得/設定するのに使用する。
もしセッションが制御端末を持っていて、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 以上の整数である。
関連項目
getuid
(2),
setsid
(2),
tcgetpgrp
(3),
tcsetpgrp
(3),
termios
(3),
feature_test_macros
(7)