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 以上の整数である。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする