RFORK(2) FreeBSD システムコールマニュアル RFORK(2)
名称
rfork − プロセスリソースの操作 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <unistd.h> pid_t |
rfork(int flags); |
解説 |
fork, vfork, rfork は、新しいプロセスが作成される唯一の方法です。 rfork() への引数 flags は、起動しているプロセス (親) のどのリソースが新しいプロセ ス (子) によって共有されるか、またはそれらのデフォルト値に初期化されるか を選択します。リソースにはオープンファイル記述子テーブル (これは、共有さ れる場合、プロセスが他のプロセスについてファイルを開閉することを許容しま す) およびオープンファイルが含まれます。 flags 引数は次の項目の論理和 (OR) です: |
RFPROC
設定されている場合、新しいプロセスが作成されます。そうでない 場合、変更が現在のプロセスに影響を及ぼします。 RFNOWAIT RFFDG RFCFDG RFMEM RFSIGSHARE RFLINUXTHPN 共有ファイル記述子テーブル内のファイル記述子は、明示的に閉じられるか、ま たはテーブルを共有しているすべてのプロセスが終了するまで開いたままに保た れます。 RFPROC が設定されている場合、親プロセス内で返される値は子プロセスのプロセ ス ID です。子プロセス内で返される値は 0 です。 RFPROC がない場合、戻り値 は 0 です。プロセス ID の範囲は 1 から最大整数値 (int) です。必要であれ ば、要求されたプロセスリソースが利用できるようになるまで rfork() システム コールは待機します。 fork() システムコールは、 rfork(RFFDG | RFPROC) への呼び出しとして実装可 能ですが、後方互換性のためにそのようには実装されていません。 戻り値 |
正常に完了した場合、 rfork() は、子プロセスに値 0 を返し、子プロセスのプ ロセス ID を親プロセスに返します。そうでない場合、子プロセスは作成されず に、値 -1 が親プロセスに返され、エラーを示すためにグローバル変数 errno が 設定されます。 |
エラー
rfork() システムコールは、次の場合に処理を失敗し、子プロセスは作成されま せん: |
[EAGAIN]
実行中のプロセスの合計数がシステムの課す制限を超過して しまいます。制限は sysctl(3) MIB 変数 KERN_MAXPROC に よって指定されます (スーパユーザを除いて、制限は実際に はこれより 10 個少なくなります)。 [EAGAIN] [EAGAIN] [EINVAL] [EINVAL] [ENOMEM] 関連項目 |
fork(2), intro(2), minherit(2), vfork(2), rfork_thread(3) |
バグ
FreeBSD では、ネイティブな clone() ライブラリコールは未だに実装されていま せんし、現在の pthreads 実装は RFMEM を指定した rfork() を利用していませ ん。 linux スレッドライブラリのネイティブポートである、 /usr/ports/devel/linuxthreads は RFMEM を利用して動作する clone() 呼び出 しを含んでいます。 rfork_thread(3) 関数は clone() の代わりとして利用する ことができます。 |
歴史
rfork() 関数は Plan9 ではじめて登場しました。 FreeBSD 10.0 January 31, 2003 FreeBSD 10.0 |