FORK
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
fork
- 新しいプロセスを作成する
索引
ライブラリ
Lb libc
索引
書式
In sys/types.h
In unistd.h
Ft pid_t
Fn fork void
索引
解説
Fn fork
システムコールによって新しいプロセスの作成が行われます。
新しいプロセス (子プロセス)は、
以下の項目を除いた呼び出しプロセス (親プロセス) の正確なコピーです。
-
子プロセスはユニークなプロセス ID を持ちます。
-
子プロセスは異なる親プロセス ID を持ちます
(すなわち、親プロセスのプロセス ID です)。
-
子プロセスは、専用の、親の記述子のコピーを持ちます。
それらの記述子は下層の同じオブジェクトを参照します。
つまり子と親の間で、たとえばファイルオブジェクト内の
ファイルポインタが共有されます。
そのため子プロセスの記述子への
lseek(2)
が、その後の親による
read(2)
または
write(2)
に影響を及ぼします。
この記述子コピーは、新しく作成されたプロセス用の標準入出力を確立するために、
およびパイプをセットアップするために、シェルによっても使用されます。
-
子プロセスのリソース使用状況は 0 に設定されます。
setrlimit(2)
を参照してください。
-
すべてのインターバルタイマがクリアされます。
setitimer(2)
を参照してください。
索引
戻り値
正常に完了した場合、
Fn fork
は、子プロセスに値 0 を返し、子プロセスのプロセス ID を親プロセスに返します。
そうでない場合は -1 が親プロセスに返され、子プロセスは作成されずに、
エラーを示すためにグローバル変数
errno
が設定されます。
索引
エラー
次の場合に
Fn fork
システムコールは処理に失敗し、子プロセスは作成されません:
- Bq Er EAGAIN
-
実行中のプロセスの合計数がシステムの限界を超えます。
限界値は
sysctl(3)
の MIB 変数の
KERN_MAXPROC
によって指定されます (スーパユーザを除いて、
実際には限界はこれより 10 個少なくなります)。
- Bq Er EAGAIN
-
ユーザがスーパユーザでなく、
1 人のユーザによって実行中のプロセスの合計数が、システムの限界を越えます。
限界は
sysctl(3)
の MIB 変数の
KERN_MAXPROCPERUID
によって指定されます。
- Bq Er EAGAIN
-
ユーザがスーパユーザでなく、
Fa resource
引数の
RLIMIT_NPROC
に対応するソフトリソース限界を越えます
( getrlimit(2)
を参照)。
- Bq Er ENOMEM
-
新しいプロセス用のスワップ空間が不充分です。
索引
関連項目
execve(2),
rfork(2),
setitimer(2),
setrlimit(2),
vfork(2),
wait(2)
索引
歴史
Fn fork
関数は
AT&T System
v6
で登場しました。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 関連項目
-
- 歴史
-
Time: 07:06:25 GMT, January 12, 2009