スポンサーリンク

FORK(2) FreeBSD システムコールマニュアル FORK(2)

名称

fork − 新しいプロセスを作成する

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <sys/types.h>
#include <unistd.h>

pid_t

fork(void);

解説

fork() システムコールによって新しいプロセスの作成が行われます。新しいプロ セス (子プロセス)は、以下の項目を除いた呼び出しプロセス (親プロセス) の正 確なコピーです。

 子プロセスはユニークなプロセス ID を持ちます。

子プロセスは異なる親プロセス ID を持ちます (すなわち、親プロセ スのプロセス ID です)。

子プロセスは、専用の、親の記述子のコピーを持ちます。それらの記 述子は下層の同じオブジェクトを参照します。つまり子と親の間で、 たとえばファイルオブジェクト内のファイルポインタが共有されま す。そのため子プロセスの記述子への lseek(2) が、その後の親によ る read(2) または write(2) に影響を及ぼします。この記述子コピー は、新しく作成されたプロセス用の標準入出力を確立するために、お よびパイプをセットアップするために、シェルによっても使用されま す。

子プロセスのリソース使用状況は 0 に設定されます。 setrlimit(2) を参照してください。

すべてのインターバルタイマがクリアされます。 setitimer(2) を参 照してください。

戻り値

正常に完了した場合、 fork() は、子プロセスに値 0 を返し、子プロセスのプロ セス ID を親プロセスに返します。そうでない場合は -1 が親プロセスに返さ れ、子プロセスは作成されずに、エラーを示すためにグローバル変数 errno が設 定されます。

エラー

次の場合に fork() システムコールは処理に失敗し、子プロセスは作成されませ ん:

       [EAGAIN]

実行中のプロセスの合計数がシステムの限界を超えます。限 界値は sysctl(3) の MIB 変数の KERN_MAXPROC によって指 定されます (スーパユーザを除いて、実際には限界はこれよ り 10 個少なくなります)。

[EAGAIN]
ユーザがスーパユーザでなく、 1 人のユーザによって実行 中のプロセスの合計数が、システムの限界を越えます。限界 は sysctl(3) の MIB 変数の KERN_MAXPROCPERUID によって 指定されます。

[EAGAIN]
ユーザがスーパユーザでなく、 resource 引数の RLIMIT_NPROC に対応するソフトリソース限界を越えます (getrlimit(2) を参照)。

[ENOMEM]
新しいプロセス用のスワップ空間が不充分です。

関連項目

execve(2), rfork(2), setitimer(2), setrlimit(2), vfork(2), wait(2)

歴史

fork() 関数は Version 6 AT&T UNIX で登場しました。

FreeBSD 10.0 June 4, 1993 FreeBSD 10.0

スポンサーリンク