fork(2)
|
FreeBSD 一般コマンドマニュアル
|
fork
fork
書式
#include <sys/types.h>
#include <unistd.h>
pid_t
fork(void);
解説
fork() によって新しいプロセスの作成が行われます。新しいプロセス (子プロセ
ス)は、以下の項目を除いた呼び出しプロセス (親プロセス) の正確なコピーで
す。
o 子プロセスはユニークなプロセス ID を持ちます。
o 子プロセスは異なる親プロセス ID を持ちます (すなわち、親プロセ
スのプロセス ID です)。
o 子プロセスは、専用の、親の記述子のコピーを持ちます。それらの記
述子は下層の同じオブジェクトを参照します。つまり子と親の間で、
たとえばファイルオブジェクト内のファイルポインタが共有されま
す。そのため子プロセスの記述子への lseek(2) が、その後の親によ
る read(2) または write(2) に影響を及ぼします。この記述子コピー
は、新しく作成されたプロセス用の標準入出力を確立するために、お
よびパイプをセットアップするために、シェルによっても使用されま
す。
o 子プロセスのリソース使用状況は 0 に設定されます。 setrlimit(2)
を参照してください。
戻り値
正常に完了した場合、 fork() は、子プロセスに値 0 を返し、子プロセスのプロ
セス ID を親プロセスに返します。そうでない場合は -1 が親プロセスに返さ
れ、子プロセスは作成されずに、エラーを示すためにグローバル変数 errno が設
定されます。
エラー
次の場合に fork() は処理に失敗し、子プロセスは作成されません。
[EAGAIN] 実行中のプロセスの合計数がシステムの限界を超えます。限
界値は sysctl(3) の MIB 変数の KERN_MAXPROC によって指
定されます (スーパユーザを除いて、実際には限界はこれよ
り 1 つ小さくなります)。
[EAGAIN] ユーザがスーパユーザでなく、 1 人のユーザによって実行
中のプロセスの合計数にシステムが課す限界を越えます。限
界は sysctl(3) の MIB 変数の KERN_MAXPROCPERUID によっ
て指定されます。
[EAGAIN] ユーザがスーパユーザでなく、リソースパラメータの
RLIMIT_NPROC に対応するソフトリソース限界を越えます。
(getrlimit(2) を参照)。