OSDN Git Service

Convert release and draft pages to UTF-8.
[linuxjm/jm.git] / manual / LDP_man-pages / release / man2 / setpgid.2
1 .\" Copyright (c) 1983, 1991 Regents of the University of California.
2 .\" and Copyright (C) 2007, Michael Kerrisk <mtk.manpages@gmail.com>
3 .\" All rights reserved.
4 .\"
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
7 .\" are met:
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\"    notice, this list of conditions and the following disclaimer.
10 .\" 2. Redistributions in binary form must reproduce the above copyright
11 .\"    notice, this list of conditions and the following disclaimer in the
12 .\"    documentation and/or other materials provided with the distribution.
13 .\" 3. All advertising materials mentioning features or use of this software
14 .\"    must display the following acknowledgement:
15 .\"     This product includes software developed by the University of
16 .\"     California, Berkeley and its contributors.
17 .\" 4. Neither the name of the University nor the names of its contributors
18 .\"    may be used to endorse or promote products derived from this software
19 .\"    without specific prior written permission.
20 .\"
21 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 .\" SUCH DAMAGE.
32 .\"
33 .\"     @(#)getpgrp.2   6.4 (Berkeley) 3/10/91
34 .\"
35 .\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
36 .\" Modified 1995-04-15 by Michael Chastain <mec@shell.portal.com>:
37 .\"   Added 'getpgid'.
38 .\" Modified 1996-07-21 by Andries Brouwer <aeb@cwi.nl>
39 .\" Modified 1996-11-06 by Eric S. Raymond <esr@thyrsus.com>
40 .\" Modified 1999-09-02 by Michael Haardt <michael@moria.de>
41 .\" Modified 2002-01-18 by Michael Kerrisk <mtk.manpages@gmail.com>
42 .\" Modified 2003-01-20 by Andries Brouwer <aeb@cwi.nl>
43 .\" 2007-07-25, mtk, fairly substantial rewrites and rearrangements
44 .\" of text.
45 .\"
46 .\" Japanese Version Copyright (c) 1997-1999 HANATAKA Shinya
47 .\"         all rights reserved.
48 .\" Translated Sun Nov 21 18:54:10 JST 1999
49 .\"         by HANATAKA Shinya <hanataka@abyss.rim.or.jp>
50 .\" Updated Fri Feb  7 JST 2003 by Kentaro Shirakata <argrath@ub32.org>
51 .\" Updated Sun Feb 23 JST 2003 by Kentaro Shirakata <argrath@ub32.org>
52 .\" Updated 2007-09-25, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.64
53 .\" Updated 2010-04-23, Akihiro MOTOKI, LDP v3.24
54 .\"
55 .\"WORD:        process group           プロセスグループ
56 .\"WORD:        process group ID        プロセスグループ ID
57 .\"WORD:        terminal                端末
58 .\"WORD:        foreground              フォアグランド
59 .\"WORD:        block                   中断(block)
60 .\"WORD:        job control             ジョブ・コントロール
61 .\"
62 .TH SETPGID 2 2010-09-26 "Linux" "Linux Programmer's Manual"
63 .SH 名前
64 setpgid, getpgid, setpgrp, getpgrp \- プロセスグループの設定/取得を行う
65 .SH 書式
66 .B #include <unistd.h>
67 .sp
68 .BI "int setpgid(pid_t " pid ", pid_t " pgid );
69 .br
70 .BI "pid_t getpgid(pid_t " pid );
71 .sp
72 .BR "pid_t getpgrp(void);" "                 /* POSIX.1 version */"
73 .br
74 .BI "pid_t getpgrp(pid_t " pid ");\ \ \ \ \ \ \ \ \ \ \ "
75 /* BSD version */
76 .sp
77 .BR "int setpgrp(void);" "                   /* System V version */"
78 .br
79 .BI "int setpgrp(pid_t " pid ", pid_t " pgid ");\ "
80 /* BSD version */
81 .sp
82 .in -4n
83 glibc 向けの機能検査マクロの要件
84 .RB ( feature_test_macros (7)
85 参照):
86 .in
87 .sp
88 .ad l
89 .PD 0
90 .BR getpgid ():
91 .RS 4
92 _XOPEN_SOURCE\ >=\ 500 ||
93 _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
94 .br
95 || /* glibc 2.12 以降: */ _POSIX_C_SOURCE\ >=\ 200809L
96 .RE
97 .sp
98 .BR setpgrp "() (POSIX.1):"
99 .nf
100     _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 500 ||
101     _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
102 .fi
103 .sp
104 .BR setpgrp "()\ (BSD),"
105 .BR getpgrp "()\ (BSD):"
106 .nf
107     _BSD_SOURCE &&
108         !\ (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE ||
109            _XOPEN_SOURCE_EXTENDED || _GNU_SOURCE || _SVID_SOURCE)
110 .fi
111 .PD
112 .ad
113 .SH 説明
114 これらのインタフェースすべてが Linux で利用可能で、
115 これらを使ってプロセスのプロセスグループ ID (PGID) の
116 取得や設定ができる。
117 推奨の、POSIX.1 で規定された方法では、
118 .BR getpgrp (void)
119 で呼び出し元プロセスの PGID を取得し、
120 .BR setpgid ()
121 で設定する。
122
123 .BR setpgid ()
124
125 .I pid
126 で指定したプロセスの PGID に
127 .I pgid
128 を設定する。
129 .I pid
130 がゼロならば、呼び出し元プロセスのプロセス ID が pid として使用される。
131 .I pgid
132 がゼロならば、
133 .I pid
134 で指定されたプロセスの PGID がそのプロセスのプロセス ID と
135 同じに設定される。
136 .BR setpgid ()
137 をプロセスをあるプロセスグループから別のグループへ
138 移動するために使用する場合は (一部のシェルはパイプラインを生成
139 する時にこれを行う)、両方のプロセスグループは同じセッションの
140 一部でなければならない
141 .RB ( setsid (2)
142
143 .BR credentials (7)
144 参照)。この場合は \fIpgid\fP は参加すべき既存の
145 プロセスグループを指定し、そのセッション ID は参加するプロセスの
146 セッション ID に一致しなければならない。
147
148 POSIX.1 バージョンの
149 .BR getpgrp ()
150 は引き数を一つもとらず、
151 呼び出し元プロセスの PGID を返す。
152
153 .BR getpgid ()
154
155 .I pid
156 で指定されたプロセスの PGID を返す。
157 .I pid
158 がゼロならば、呼び出し元プロセスのプロセス ID が pid として使用される。
159 (呼び出し元プロセス以外のプロセスの PGID の取得が必要になることは
160 めったになく、呼び出し元プロセスの PGID を取得するには
161 POSIX.1 バージョンの
162 .BR getpgrp ()
163 を使うのが望ましい。)
164
165 System V バージョンの
166 .BR setpgrp ()
167 は引き数を一つもとらず、
168 .I "setpgid(0,\ 0)"
169 と等価である。
170
171 BSD 仕様の
172 .BR setpgrp ()
173
174 .I pid
175
176 .I pgid
177 を引き数にとり、
178 .I "setpgid(pid, pgid)"
179 と等価である。
180 .\" The true BSD setpgrp() system call differs in allowing the PGID
181 .\" to be set to arbitrary values, rather than being restricted to
182 .\" PGIDs in the same session.
183
184 BSD 仕様の
185 .BR getpgrp ()
186
187 .I pid
188 だけを引き数にとり、
189 .I "getpgid(pid)"
190 と等価である。
191 .SH 返り値
192 .BR setpgid ()
193
194 .BR setpgrp ()
195 は成功した場合、ゼロを返す。エラーの場合は \-1 を返し、
196 .I errno
197 が適切に設定される。
198
199 POSIX.1 バージョンの
200 .BR getpgrp ()
201 は常に呼び出しプロセスの PGID を返す。
202
203 .BR getpgid ()
204 と BSD 仕様の
205 .BR getpgrp ()
206 は成功した場合プロセスグループを返す。
207 エラーの場合は \-1 を返し、
208 .I errno
209 が適切に設定される。
210 .SH エラー
211 .TP
212 .B EACCES
213 呼び出し元プロセスの子プロセスのプロセスグループ ID を変更しようとしたが、
214 すでにその子プロセスは
215 .BR execve (2)
216 を実行していた。
217 .RB ( setpgid (),
218 .BR setpgrp ())
219 .TP
220 .B EINVAL
221 .I pgid
222 が 0 より小さい。
223 .RB ( setpgid (),
224 .BR setpgrp ())
225 .TP
226 .B EPERM
227 プロセスを異なるセッションのプロセスグループに移動させようとした。
228 または呼び出し元プロセスの子プロセスのプロセスグループ ID を変更しようと
229 したが、その子プロセスは別のセッションだった。
230 またはセッションリーダーのプロセスグループ ID を変更しようとした。
231 .RB ( setpgid (),
232 .BR setpgrp ())
233 .TP
234 .B ESRCH
235 .BR getpgid ()
236 の場合:
237 .I pid
238 がどのプロセスにも一致しない。
239 .BR setpgid ()
240 の場合:
241 .I pid
242 が呼び出し元のプロセスではなく、呼び出し元のプロセスの子プロセスでもない。
243 .SH 準拠
244 .BR setpgid ()
245 と、引き数なしバージョンの
246 .BR getpgrp ()
247 は POSIX.1-2001 に準拠している。
248
249 POSIX.1-2001 は、
250 .BR getpgid ()
251 と、引き数なしバージョンの
252 .BR setpgrp ()
253 も規定している。
254 POSIX.1-2008 は、この
255 .BR setpgrp ()
256 の仕様を廃止予定としている。
257
258 引き数 1 個バージョンの
259 .BR getpgrp ()
260 と引き数 2 個バージョンの
261 .BR setpgrp ()
262 は 4.2BSD に由来し、
263 POSIX.1 では規定されていない。
264 .SH 注意
265 .BR fork (2)
266 で作成された子プロセスは、親プロセスの PGID
267 を継承する。
268 .BR execve (2)
269 の前後で PGID は保存される。
270
271 各プロセスグループはセッションのメンバーであり、各プロセスは
272 そのプロセスグループが所属しているセッションのメンバーである。
273
274 セッションは制御端末 (controlling terminal) を持つことができる。
275 いつでも、セッションに所属するプロセスグループの一つ (だけ) が
276 端末のフォアグランドのプロセスグループになることができ、
277 残りのプロセスグループはバックグラウンドになる。
278 端末からシグナルが生成された場合 (例えば、中断キーを叩いて
279 .B SIGINT
280 が生成されるなど)、そのシグナルはフォアグラウンドのプロセスグループ
281 に送られる
282 (シグナルを生成する文字の説明は
283 .BR termios (3)
284 を参照)。
285 フォアグラウンドのプロセスグループだけが端末からの
286 .BR read (2)
287 ができる。
288 バックグラウンドのプロセスグループが端末からの
289 .BR read (2)
290 を行おうとした場合、そのプロセスグループにはシグナル
291 .B SIGTSTP
292 が送られ、そのプロセスグループは一時停止 (suspend) する。
293 関数
294 .BR tcgetpgrp (3)
295
296 .BR tcsetpgrp (3)
297 を使うと、制御端末のフォアグラウンドのプロセスグループを
298 取得/設定できる。
299
300 .BR setpgid ()
301
302 .BR getpgrp ()
303 は、
304 .BR bash (1)
305 のようなプログラムで、シェルのジョブ制御 (job control) の実装のための
306 プロセスグループを作成するのに使われる。
307
308 セッションが制御端末を持っていて、その端末に対して
309 .B CLOCAL
310 フラグが設定されておらず、端末のハングアップが起きた場合、
311 セッション・リーダーに
312 .B SIGHUP
313 が送られる。
314 セッション・リーダーが終了した場合には、その制御端末の
315 フォアグランドのプロセスグループに所属する各プロセスにも
316 .B SIGHUP
317 シグナルが送られる。
318
319 プロセスの終了によってプロセスグループが孤児 (orphaned) になった際に、
320 その新たに孤児になったプロセスグループに停止しているメンバーがいれば、
321 その孤児になったプロセスグループに属す全てのプロセスに
322 .B SIGHUP
323 シグナルに続けて
324 .B SIGCONT
325 シグナルが送られる。
326 .\" exit.3 refers to the following text:
327 孤児になった (orphaned) プロセスグループとは、
328 そのプロセスグループの全てのメンバーについて、メンバーの親プロセスが、
329 親プロセス自身もそのプロセスグループのメンバーか、
330 別のセッションに属すプロセスグループのメンバーのいずれかであるような、
331 プロセスグループのことである。
332 .SH 関連項目
333 .BR getuid (2),
334 .BR setsid (2),
335 .BR tcgetpgrp (3),
336 .BR tcsetpgrp (3),
337 .BR termios (3),
338 .BR credentials (7)