.\" Copyright (c) 1983, 1991 Regents of the University of California. .\" and Copyright (C) 2007, Michael Kerrisk .\" All rights reserved. .\" .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" %%%LICENSE_END .\" .\" @(#)getpgrp.2 6.4 (Berkeley) 3/10/91 .\" .\" Modified 1993-07-24 by Rik Faith .\" Modified 1995-04-15 by Michael Chastain : .\" Added 'getpgid'. .\" Modified 1996-07-21 by Andries Brouwer .\" Modified 1996-11-06 by Eric S. Raymond .\" Modified 1999-09-02 by Michael Haardt .\" Modified 2002-01-18 by Michael Kerrisk .\" Modified 2003-01-20 by Andries Brouwer .\" 2007-07-25, mtk, fairly substantial rewrites and rearrangements .\" of text. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 1997-1999 HANATAKA Shinya .\" all rights reserved. .\" Translated Sun Nov 21 18:54:10 JST 1999 .\" by HANATAKA Shinya .\" Updated Fri Feb 7 JST 2003 by Kentaro Shirakata .\" Updated Sun Feb 23 JST 2003 by Kentaro Shirakata .\" Updated 2007-09-25, Akihiro MOTOKI , LDP v2.64 .\" Updated 2010-04-23, Akihiro MOTOKI, LDP v3.24 .\" .TH SETPGID 2 2014\-01\-07 Linux "Linux Programmer's Manual" .SH 名前 setpgid, getpgid, setpgrp, getpgrp \- プロセスグループの設定/取得を行う .SH 書式 \fB#include \fP .sp \fBint setpgid(pid_t \fP\fIpid\fP\fB, pid_t \fP\fIpgid\fP\fB);\fP .br \fBpid_t getpgid(pid_t \fP\fIpid\fP\fB);\fP .sp \fBpid_t getpgrp(void);\fP /* POSIX.1 version */ .br \fBpid_t getpgrp(pid_t \fP\fIpid\fP\fB);\ \ \ \ \ \ \ \ \ \ \ \fP /* BSD version */ .sp \fBint setpgrp(void);\fP /* System V version */ .br \fBint setpgrp(pid_t \fP\fIpid\fP\fB, pid_t \fP\fIpgid\fP\fB);\ \fP /* BSD version */ .sp .in -4n glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): .in .sp .ad l .PD 0 \fBgetpgid\fP(): .RS 4 _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED .br || /* glibc 2.12 以降: */ _POSIX_C_SOURCE\ >=\ 200809L .RE .sp \fBsetpgrp\fP() (POSIX.1): .nf _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED .br || /* glibc 2.19 以降: */ _BSD_SOURCE .fi .sp \fBsetpgrp\fP()\ (BSD), \fBgetpgrp\fP()\ (BSD) [glibc 2.19 より前]: .nf _BSD_SOURCE && !\ (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE || _XOPEN_SOURCE_EXTENDED || _GNU_SOURCE || _SVID_SOURCE) .fi .PD .ad .SH 説明 これらのインターフェースすべてが Linux で利用可能で、 これらを使ってプロセスのプロセスグループ ID (PGID) の 取得や設定ができる。 推奨の、POSIX.1 で規定された方法では、 \fBgetpgrp\fP(void) で呼び出し元プロセスの PGID を取得し、 \fBsetpgid\fP() で設定する。 \fBsetpgid\fP() は \fIpid\fP で指定したプロセスの PGID に \fIpgid\fP を設定する。 \fIpid\fP がゼロならば、呼び出し元プロセスのプロセス ID が pid として使用される。 \fIpgid\fP がゼロならば、 \fIpid\fP で指定されたプロセスの PGID がそのプロセスのプロセス ID と 同じに設定される。 \fBsetpgid\fP() をプロセスをあるプロセスグループから別のグループへ 移動するために使用する場合は (一部のシェルはパイプラインを生成 する時にこれを行う)、両方のプロセスグループは同じセッションの 一部でなければならない (\fBsetsid\fP(2) と \fBcredentials\fP(7) 参照)。この場合は \fIpgid\fP は参加すべき既存の プロセスグループを指定し、そのセッション ID は参加するプロセスの セッション ID に一致しなければならない。 POSIX.1 バージョンの \fBgetpgrp\fP() は引き数を一つもとらず、 呼び出し元プロセスの PGID を返す。 \fBgetpgid\fP() は \fIpid\fP で指定されたプロセスの PGID を返す。 \fIpid\fP がゼロならば、呼び出し元プロセスのプロセス ID が pid として使用される。 (呼び出し元プロセス以外のプロセスの PGID の取得が必要になることは めったになく、呼び出し元プロセスの PGID を取得するには POSIX.1 バージョンの \fBgetpgrp\fP() を使うのが望ましい。) System\ V バージョンの \fBsetpgrp\fP() は引き数を一つもとらず、 \fIsetpgid(0,\ 0)\fP と等価である。 BSD 仕様の \fBsetpgrp\fP() は \fIpid\fP と \fIpgid\fP を引き数にとり、 以下を呼び出すラッパー関数である。 setpgid(pid, pgid) .\" The true BSD setpgrp() system call differs in allowing the PGID .\" to be set to arbitrary values, rather than being restricted to .\" PGIDs in the same session. glibc 2.19 以降、 BSD 固有の \fBsetpgrp\fP() 関数はもはや \fI\fP では公開されない。 この関数の呼び出しは上記の \fBsetpgid\fP() の呼び出しで置き換えるべきである。 BSD 仕様の \fBgetpgrp\fP() は \fIpid\fP だけを引き数にとり、 以下を呼び出すラッパー関数である。 getpgid(pid) glibc 2.19 以降、 BSD 固有の \fBgetpgrp\fP() 関数はもはや \fI\fP では公開されない。 この関数の呼び出しは、引き数を取らない POSIX.1 の \fBgetpgrp\fP() の呼び出し (呼び出し元の PGID を取得する目的の場合)、もしくは上記の \fBgetpgid\fP() の呼び出しで置き換えるべきである。 .SH 返り値 \fBsetpgid\fP() と \fBsetpgrp\fP() は成功した場合、ゼロを返す。エラーの場合は \-1 を返し、 \fIerrno\fP が適切に設定される。 POSIX.1 バージョンの \fBgetpgrp\fP() は常に呼び出しプロセスの PGID を返す。 \fBgetpgid\fP() と BSD 仕様の \fBgetpgrp\fP() は成功した場合プロセスグループを返す。 エラーの場合は \-1 を返し、 \fIerrno\fP が適切に設定される。 .SH エラー .TP \fBEACCES\fP 呼び出し元プロセスの子プロセスのプロセスグループ ID を変更しようとしたが、 すでにその子プロセスは \fBexecve\fP(2) を実行していた。 (\fBsetpgid\fP(), \fBsetpgrp\fP()) .TP \fBEINVAL\fP \fIpgid\fP が 0 より小さい。 (\fBsetpgid\fP(), \fBsetpgrp\fP()) .TP \fBEPERM\fP プロセスを異なるセッションのプロセスグループに移動させようとした。 または呼び出し元プロセスの子プロセスのプロセスグループ ID を変更しようと したが、その子プロセスは別のセッションだった。 またはセッションリーダーのプロセスグループ ID を変更しようとした。 (\fBsetpgid\fP(), \fBsetpgrp\fP()) .TP \fBESRCH\fP \fBgetpgid\fP() の場合: \fIpid\fP がどのプロセスにも一致しない。 \fBsetpgid\fP() の場合: \fIpid\fP が呼び出し元のプロセスではなく、呼び出し元のプロセスの子プロセスでもない。 .SH 準拠 \fBsetpgid\fP() と、引き数なしバージョンの \fBgetpgrp\fP() は POSIX.1\-2001 に準拠している。 POSIX.1\-2001 は、 \fBgetpgid\fP() と、引き数なしバージョンの \fBsetpgrp\fP() も規定している。 POSIX.1\-2008 は、この \fBsetpgrp\fP() の仕様を廃止予定としている。 引き数 1 個バージョンの \fBgetpgrp\fP() と引き数 2 個バージョンの \fBsetpgrp\fP() は 4.2BSD に由来し、 POSIX.1 では規定されていない。 .SH 注意 \fBfork\fP(2) で作成された子プロセスは、親プロセスの PGID を継承する。 \fBexecve\fP(2) の前後で PGID は保存される。 各プロセスグループはセッションのメンバーであり、各プロセスは そのプロセスグループが所属しているセッションのメンバーである。 セッションは制御端末 (controlling terminal) を持つことができる。 いつでも、セッションに所属するプロセスグループの一つ (だけ) が 端末のフォアグランドのプロセスグループになることができ、 残りのプロセスグループはバックグラウンドになる。 端末からシグナルが生成された場合 (例えば、中断キーを叩いて \fBSIGINT\fP が生成されるなど)、そのシグナルはフォアグラウンドのプロセスグループ に送られる (シグナルを生成する文字の説明は \fBtermios\fP(3) を参照)。 フォアグラウンドのプロセスグループだけが端末からの \fBread\fP(2) ができる。 バックグラウンドのプロセスグループが端末からの \fBread\fP(2) を行おうとした場合、そのプロセスグループにはシグナル \fBSIGTTIN\fP が送られ、そのプロセスグループは一時停止 (suspend) する。 関数 \fBtcgetpgrp\fP(3) と \fBtcsetpgrp\fP(3) を使うと、制御端末のフォアグラウンドのプロセスグループを 取得/設定できる。 \fBsetpgid\fP() と \fBgetpgrp\fP() は、 \fBbash\fP(1) のようなプログラムで、シェルのジョブ制御 (job control) の実装のための プロセスグループを作成するのに使われる。 セッションが制御端末を持っていて、その端末に対して \fBCLOCAL\fP フラグが設定されておらず、端末のハングアップが起きた場合、 セッションリーダーに \fBSIGHUP\fP が送られる。 セッションリーダーが終了した場合には、その制御端末の フォアグランドのプロセスグループに所属する各プロセスにも \fBSIGHUP\fP シグナルが送られる。 .\" exit.3 refers to the following text: プロセスの終了によってプロセスグループが孤児 (orphaned) になった際に、 その新たに孤児になったプロセスグループに停止しているメンバーがいれば、 その孤児になったプロセスグループに属す全てのプロセスに \fBSIGHUP\fP シグナルに続けて \fBSIGCONT\fP シグナルが送られる。 孤児になった (orphaned) プロセスグループとは、 そのプロセスグループの全てのメンバーについて、メンバーの親プロセスが、 親プロセス自身もそのプロセスグループのメンバーか、 別のセッションに属すプロセスグループのメンバーのいずれかであるような、 プロセスグループのことである。 .SH 関連項目 \fBgetuid\fP(2), \fBsetsid\fP(2), \fBtcgetpgrp\fP(3), \fBtcsetpgrp\fP(3), \fBtermios\fP(3), \fBcredentials\fP(7) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。