Unix-system-calls-getpgid

提供:Dev Guides
移動先:案内検索

[top]#

|http://www.google.com/[Google] | a|

Web This Site
  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

[cols=",,,,,,,",]

| |  Home   | |  References   | |  Discussion Forums   | |  About TP  

[width="100%",cols="100%",]

a| == setpgid()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

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が使用されます。 _pgid_がゼロの場合、_pid_で指定されたプロセスのプロセスIDが使用されます。 *setpgid* ()を使用してプロセスをあるプロセスグループから別のプロセスグループに移動する場合(パイプラインを作成するときに一部のシェルで行われるように)、両方のプロセスグループは同じセッションの一部である必要があります。 この場合、_pgid_は、参加する既存のプロセスグループを指定し、そのグループのセッションIDは参加プロセスのセッションIDと一致する必要があります。
*getpgid* ()は、_pid_で指定されたプロセスのプロセスグループIDを返します。 _pid_がゼロの場合、現在のプロセスのプロセスIDが使用されます。

呼び出し setpgrp ()は* setpgid(0,0)*と同等です。

同様に、 getpgrp ()は getpgid (0)と同等です。 各プロセスグループはセッションのメンバーであり、各プロセスはそのプロセスグループがメンバーであるセッションのメンバーです。

プロセスグループは、信号の配布に使用され、端末は入力要求を調停します。端末と同じプロセスグループを持つプロセスはフォアグラウンドで読み取りが可能ですが、他のユーザーは読み取りを試みると信号でブロックされます。 したがって、これらの呼び出しは、 csh (1)などのプログラムで使用され、ジョブ制御の実装時にプロセスグループを作成します。 termios (3)で説明されている TIOCGPGRP および TIOCSPGRP 呼び出しは、制御端末のプロセスグループを取得/設定するために使用されます。

セッションに制御端末がある場合、CLOCALは設定されず、ハングアップが発生し、セッションリーダーにSIGHUPが送信されます。 セッションリーダーが終了すると、SIGHUPシグナルが制御端末のフォアグラウンドプロセスグループの各プロセスに送信されます。

プロセスの終了によりプロセスグループが孤立し、新たに孤立したプロセスグループのメンバーが停止した場合、SIGCONTシグナルが後に続くSIGHUPシグナルが、新たに孤立したプロセスグループの各プロセスに送信されます。 。

返り値

成功すると、 setpgid ()および setpgrp ()はゼロを返します。 エラーの場合、-1が返され、_errno_が適切に設定されます。

*getpgid* ()は、成功するとプロセスグループを返します。 エラーの場合、-1が返され、_errno_が適切に設定されます。
*getpgrp* ()は常に現在のプロセスグループを返します。

エラー

Tag Description
*EACCES * An attempt was made to change the process group ID of one of the children of the calling process and the child had already performed an* execve*() (setpgid(), setpgrp()).
EINVAL pgid is less than 0 (setpgid(), setpgrp()).
EPERM An attempt was made to move a process into a process group in a different session, or to change the process group ID of one of the children of the calling process and the child was in a different session, or to change the process group ID of a session leader (setpgid(), setpgrp()).
*ESRCH * For* getpgid*(): pid does not match any process. For setpgid(): pid is not the current process and not a child of the current process.

準拠

関数 setpgid ()および getpgrp ()はPOSIX.1-2001に準拠しています。 関数 setpgrp ()は4.2BSDのものです。 関数 getpgid ()はSVr4に準拠しています。

ノート

*fork* (2)で作成された子は、親のプロセスグループIDを継承します。 プロセスグループIDは、 *execve* (2)にわたって保持されます。

POSIXは、BSD関数 setpgrp ()から setpgid ()を取得しました。 System Vにも同じ名前の関数がありますが、 setsid (2)と同じです。

glibcでプロトタイプを取得するには、XOPEN_SOURCEと_XOPEN_SOURCE_EXTENDEDの両方を定義するか、500以上の整数_n_に「#define _XOPEN_SOURCE _n」を使用します。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

|  

[cols="^",]

|Advertisements