Manpages

名 前

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

書 式

#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t
pid);

pid_t getpgrp(void); /* POSIX.1 version */
pid_t getpgrp(pid_t
pid);            /* BSD version */

int setpgrp(void); /* System V version */
int setpgrp(pid_t
pid, pid_t pgid);  /* BSD version */

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

getpgid():

_XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* glibc 2.12 以 降 : */ _POSIX_C_SOURCE >= 200809L

setpgrp() (POSIX.1):
_SVID_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* glibc 2.19 以 降 : */ _BSD_SOURCE

setpgrp() (BSD), getpgrp() (BSD) [glibc 2.19 よ り 前 ]:
_BSD_SOURCE &&
! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE ||
_XOPEN_SOURCE_EXTENDED || _GNU_SOURCE || _SVID_SOURCE)

説 明

こ れ ら の イ ン タ ー フ ェ ー ス す べ て が Linux で 利 用 可 能 で 、 こ れ ら を 使 っ て プ ロ セ ス の プ ロ セ ス グ ル ー プ ID (PGID) の 取 得 や 設 定 が で き る 。 推 奨 の 、 POSIX.1 で 規 定 さ れ た 方 法 で は 、 getpgrp(void) で 呼 び 出 し 元 プ ロ セ ス の PGID を 取 得 し 、 setpgid() で 設 定 す る 。

setpgid() は pid で 指 定 し た プ ロ セ ス の PGID に pgid を 設 定 す る 。 pid が ゼ ロ な ら ば 、 呼 び 出 し 元 プ ロ セ ス の プ ロ セ ス ID が pid と し て 使 用 さ れ る 。 pgid が ゼ ロ な ら ば 、 pid で 指 定 さ れ た プ ロ セ ス の PGID が そ の プ ロ セ ス の プ ロ セ ス ID と 同 じ に 設 定 さ れ る 。 setpgid() を プ ロ セ ス を あ る プ ロ セ ス グ ル ー プ か ら 別 の グ ル ー プ へ 移 動 す る た め に 使 用 す る 場 合 は (一 部 の シ ェ ル は パ イ プ ラ イ ン を 生 成 す る 時 に こ れ を 行 う )、 両 方 の プ ロ セ ス グ ル ー プ は 同 じ セ ッ シ ョ ン の 一 部 で な け れ ば な ら な い (setsid(2) と credentials(7) 参 照 )。 こ の 場 合 は pgid は 参 加 す べ き 既 存 の プ ロ セ ス グ ル ー プ を 指 定 し 、 そ の セ ッ シ ョ ン ID は 参 加 す る プ ロ セ ス の セ ッ シ ョ ン ID に 一 致 し な け れ ば な ら な い 。

POSIX.1 バ ー ジ ョ ン の getpgrp() は 引 き 数 を 一 つ も と ら ず 、 呼 び 出 し 元 プ ロ セ ス の PGID を 返 す 。

getpgid() は pid で 指 定 さ れ た プ ロ セ ス の PGID を 返 す 。 pid が ゼ ロ な ら ば 、 呼 び 出 し 元 プ ロ セ ス の プ ロ セ ス ID が pid と し て 使 用 さ れ る 。 (呼 び 出 し 元 プ ロ セ ス 以 外 の プ ロ セ ス の PGID の 取 得 が 必 要 に な る こ と は め っ た に な く 、 呼 び 出 し 元 プ ロ セ ス の PGID を 取 得 す る に は POSIX.1 バ ー ジ ョ ン の getpgrp() を 使 う の が 望 ま し い 。 )

System V バ ー ジ ョ ン の setpgrp() は 引 き 数 を 一 つ も と ら ず 、 setpgid(0, 0) と 等 価 で あ る 。

BSD 仕 様 の setpgrp() は pidpgid を 引 き 数 に と り 、 以 下 を 呼 び 出 す ラ ッ パ ー 関 数 で あ る 。

setpgid(pid, pgid)

glibc 2.19 以 降 、 BSD 固 有 の setpgrp() 関 数 は も は や <unistd.h> で は 公 開 さ れ な い 。 こ の 関 数 の 呼 び 出 し は 上 記 の setpgid() の 呼 び 出 し で 置 き 換 え る べ き で あ る 。

BSD 仕 様 の getpgrp() は pid だ け を 引 き 数 に と り 、 以 下 を 呼 び 出 す ラ ッ パ ー 関 数 で あ る 。

getpgid(pid)

glibc 2.19 以 降 、 BSD 固 有 の getpgrp() 関 数 は も は や <unistd.h> で は 公 開 さ れ な い 。 こ の 関 数 の 呼 び 出 し は 、 引 き 数 を 取 ら な い POSIX.1 の getpgrp() の 呼 び 出 し (呼 び 出 し 元 の PGID を 取 得 す る 目 的 の 場 合 )、 も し く は 上 記 の getpgid() の 呼 び 出 し で 置 き 換 え る べ き で あ る 。

返 り 値

setpgid() と setpgrp() は 成 功 し た 場 合 、 ゼ ロ を 返 す 。 エ ラ ー の 場 合 は −1 を 返 し 、 errno が 適 切 に 設 定 さ れ る 。

POSIX.1 バ ー ジ ョ ン の getpgrp() は 常 に 呼 び 出 し プ ロ セ ス の PGID を 返 す 。

getpgid() と BSD 仕 様 の getpgrp() は 成 功 し た 場 合 プ ロ セ ス グ ル ー プ を 返 す 。 エ ラ ー の 場 合 は −1 を 返 し 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

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 に 準 拠 し て い る 。

POSIX.1−2001 は 、 getpgid() と 、 引 き 数 な し バ ー ジ ョ ン の setpgrp() も 規 定 し て い る 。 POSIX.1−2008 は 、 こ の setpgrp() の 仕 様 を 廃 止 予 定 と し て い る 。 引 き 数 1 個 バ ー ジ ョ ン の getpgrp() と 引 き 数 2 個 バ ー ジ ョ ン の setpgrp() は 4.2BSD に 由 来 し 、 POSIX.1 で は 規 定 さ れ て い な い 。

注 意

fork(2) で 作 成 さ れ た 子 プ ロ セ ス は 、 親 プ ロ セ ス の PGID を 継 承 す る 。 execve(2) の 前 後 で PGID は 保 存 さ れ る 。 各 プ ロ セ ス グ ル ー プ は セ ッ シ ョ ン の メ ン バ ー で あ り 、 各 プ ロ セ ス は そ の プ ロ セ ス グ ル ー プ が 所 属 し て い る セ ッ シ ョ ン の メ ン バ ー で あ る 。 セ ッ シ ョ ン は 制 御 端 末 (controlling terminal) を 持 つ こ と が で き る 。 い つ で も 、 セ ッ シ ョ ン に 所 属 す る プ ロ セ ス グ ル ー プ の 一 つ (だ け ) が 端 末 の フ ォ ア グ ラ ン ド の プ ロ セ ス グ ル ー プ に な る こ と が で き 、 残 り の プ ロ セ ス グ ル ー プ は バ ッ ク グ ラ ウ ン ド に な る 。 端 末 か ら シ グ ナ ル が 生 成 さ れ た 場 合 (例 え ば 、 中 断 キ ー を 叩 い て SIGINT が 生 成 さ れ る な ど )、 そ の シ グ ナ ル は フ ォ ア グ ラ ウ ン ド の プ ロ セ ス グ ル ー プ に 送 ら れ る (シ グ ナ ル を 生 成 す る 文 字 の 説 明 は termios(3) を 参 照 )。 フ ォ ア グ ラ ウ ン ド の プ ロ セ ス グ ル ー プ だ け が 端 末 か ら の read(2) が で き る 。 バ ッ ク グ ラ ウ ン ド の プ ロ セ ス グ ル ー プ が 端 末 か ら の read(2) を 行 お う と し た 場 合 、 そ の プ ロ セ ス グ ル ー プ に は シ グ ナ ル SIGTTIN が 送 ら れ 、 そ の プ ロ セ ス グ ル ー プ は 一 時 停 止 (suspend) す る 。 関 数 tcgetpgrp(3)tcsetpgrp(3) を 使 う と 、 制 御 端 末 の フ ォ ア グ ラ ウ ン ド の プ ロ セ ス グ ル ー プ を 取 得 /設 定 で き る 。

setpgid() と getpgrp() は 、 bash(1) の よ う な プ ロ グ ラ ム で 、 シ ェ ル の ジ ョ ブ 制 御 (job control) の 実 装 の た め の プ ロ セ ス グ ル ー プ を 作 成 す る の に 使 わ れ る 。 セ ッ シ ョ ン が 制 御 端 末 を 持 っ て い て 、 そ の 端 末 に 対 し て CLOCAL フ ラ グ が 設 定 さ れ て お ら ず 、 端 末 の ハ ン グ ア ッ プ が 起 き た 場 合 、 セ ッ シ ョ ン リ ー ダ ー に SIGHUP が 送 ら れ る 。 セ ッ シ ョ ン リ ー ダ ー が 終 了 し た 場 合 に は 、 そ の 制 御 端 末 の フ ォ ア グ ラ ン ド の プ ロ セ ス グ ル ー プ に 所 属 す る 各 プ ロ セ ス に も SIGHUP シ グ ナ ル が 送 ら れ る 。 プ ロ セ ス の 終 了 に よ っ て プ ロ セ ス グ ル ー プ が 孤 児 (orphaned) に な っ た 際 に 、 そ の 新 た に 孤 児 に な っ た プ ロ セ ス グ ル ー プ に 停 止 し て い る メ ン バ ー が い れ ば 、 そ の 孤 児 に な っ た プ ロ セ ス グ ル ー プ に 属 す 全 て の プ ロ セ ス に SIGHUP シ グ ナ ル に 続 け て SIGCONT シ グ ナ ル が 送 ら れ る 。 孤 児 に な っ た (orphaned) プ ロ セ ス グ ル ー プ と は 、 そ の プ ロ セ ス グ ル ー プ の 全 て の メ ン バ ー に つ い て 、 メ ン バ ー の 親 プ ロ セ ス が 、 親 プ ロ セ ス 自 身 も そ の プ ロ セ ス グ ル ー プ の メ ン バ ー か 、 別 の セ ッ シ ョ ン に 属 す プ ロ セ ス グ ル ー プ の メ ン バ ー の い ず れ か で あ る よ う な 、 プ ロ セ ス グ ル ー プ の こ と で あ る 。

関 連 項 目

getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3), credentials(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。