Rechercher une page de manuel
setpgid
Langue: ja
Version: 2003-01-20 (mandriva - 01/05/08)
Section: 2 (Appels système)
名前
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(2) を実行していた。 (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)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre