doc/ja_JP.eucJP/man/man2/rfork.2
Kazuo Horikawa 8f404f43bb 3.4-RELEASE based section 2 w/o Makefile
Submitted by: jpman Project <man-jp@jp.FreeBSD.org>
2001-01-28 15:56:14 +00:00

138 lines
3.9 KiB
Groff

.\"
.\" This manual page is taken directly from Plan9, and modified to
.\" describe the actual BSD implementation. Permission for
.\" use of this page comes from Rob Pike <rob@plan9.att.com>.
.\"
.Dd Jan 12, 1996
.Dt RFORK 2
.Os
.Sh 名称
.Nm rfork
.Nd プロセスリソースの操作
.Sh 書式
.Fd #include <unistd.h>
.Ft int
.Fn rfork "int flags"
.Sh 解説
fork, vfork, と rfork が新しいプロセスが作成される唯一の方法です。
.Fn rfork
への
.Fa flags
引数は、起動しているプロセス (親) のどのリソースが、新しいプロセス (子) に
よって共有されるか、またはそれらのデフォルト値に初期化されるかを選択します。
リソースにはオープンファイル記述子テーブル (これは、共有されたとき、
プロセスが他のプロセスについてファイルを開閉することを
許容します) およびオープンファイルが含まれます。
.Fa flags
は次の項目の倫理和 (OR) です。
.Bl -tag -width "RFCNAMEG" -compact -offset indent
.It RFPROC
設定されている場合、新しいプロセスが
作成されます。そうでない場合、変更が現在のプロセスに影響を及ぼします。
現在のシステムでは、このフラグがいつでも設定されていることが要求されます。
.It RFNOWAIT
設定されている場合、子プロセスは親から分離されます。終了時に、子は、
親が集めるステータスを残しません。
.Xr wait 2
を参照してください。
.It RFFDG
設定されている場合、起動側のファイル記述子テーブル
.Pf ( Xr intro 2
を参照) が
コピーされます。そうでない場合、2 つのプロセスが 1 つのテーブルを共有します。
.It RFCFDG
設定されている場合、新しいプロセスは新しいファイル記述子テーブルで
開始します。
.Dv RFFDG
とは互いに排他的です。
.It RFMEM
設定されている場合、カーネルは、アドレス空間全体の共有を強制します。
その際、子は、親プロセスが所有しているすべての共有セグメントを継承します。
他のセグメントタイプは影響を受けません。親による後続の fork は、
子の間で共通データと bss を影響させます。
スタックセグメントは常に分割されます。
.Dv RFPROC
とだけ共に設定することになるでしょう。
.It RFSIGSHARE
設定されている場合、カーネルは、親子間で sigacts 構造体を共有することを
強制します。
.It RFLINUXTHPN
設定されている場合、カーネルは、
子についてのスレッド終了時に、SIGCHILD の代わりに
SIGUSR1 を返します。これは特定の Linux クローン動作を模倣するためです。
.El
.Pp
共有ファイル記述子テーブル内のファイル記述子は、
明示的に閉じられるか、またはテーブルを
共有しているすべてのプロセスが終了するまで開いたままに保たれます。
.Pp
.Dv RFPROC
が設定されている場合、
親プロセス内で返される値は子プロセスのプロセス ID です。
子プロセス内で返される値は 0 です。
.Dv RFPROC
がない場合、戻り値は 0 です。プロセス ID の範囲は
1 から最大整数値
.Ft ( int )
です。必要であれば、要求されたプロセスリソースが
利用できるようになるまで
.Fn rfork
は待機します。
.Pp
.Fn fork
は、
.Fn rfork "RFFDG | RFPROC"
への呼び出しとして実現できますが、後方互換性のためにでは
ありません。
.Sh 戻り値
正常に完了した場合、
.Fn rfork
は、子プロセスに値 0 を返し、子プロセスのプロセス ID を親プロセスに
返します。そうでない場合、子プロセスは作成されずに、
値 -1 が親プロセスに返され、
エラーを示すためにグローバル変数
.Va errno
が設定されます。
.Sh エラー
.Fn rfork
は、次の場合に処理を失敗し、子プロセスは作成されません。
.Bl -tag -width [EAGAIN]
.It Bq Er EAGAIN
実行中のプロセスの合計数がシステムの課す制限を超過してしまいます。
制限は
.Xr sysctl 3
MIB 変数
.Dv KERN_MAXPROC
によって指定されます (スーパユーザを除いて、制限は実際には
これより 1 少なくなります)。
.It Bq Er EAGAIN
ユーザがスーパユーザではなく、
1 人のユーザによる実行中のプロセスの合計数
がシステムの課した制限を超過してしまいます。制限は、
.Xr sysctl 3
MIB 変数
.Dv KERN_MAXPROCPERUID
によって指定されます。
.It Bq Er EAGAIN
ユーザがスーパユーザではなく、リソースパラメータ
.Dv RLIMIT_NOFILE
に対応するソフトリソースの限界を超過してしまいます
.Pf ( Xr getrlimit 2
を参照)。
.It Bq Er EINVAL
RFPROC フラグが指定されませんでした。
.It Bq Er EINVAL
RFFDG フラグと RFCFDG フラグの両方が指定されました。
.It Bq Er ENOMEM
新しいプロセス用に十分なスワップ空間が不足しました。
.El
.Sh 関連項目
.Xr fork 2 ,
.Xr intro 2 ,
.Xr minherit 2 ,
.Xr vfork 2
.Sh 歴史
.Fn rfork
関数は
Plan9
ではじめて登場しました。