-.\" Hey Emacs! This file is -*- nroff -*- source.
-.\"
.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
.\" A few fragments remain from an earlier (1992) page by
.\" Drew Eckhardt (drew@cs.colorado.edu),
.\"
+.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
.\"
.\" Modified by Michael Haardt (michael@moria.de)
.\" Modified Sat Jul 24 13:22:07 1993 by Rik Faith (faith@cs.unc.edu)
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH FORK 2 2012\-02\-27 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1996 TABATA Tomohira
+.\" all rights reserved.
+.\" Translated Thu Jun 27 20:35:06 JST 1996
+.\" by TABATA Tomohira <loba@k2.t.u-tokyo.ac.jp>
+.\" Modified Sun Dec 14 00:43:22 JST 1997
+.\" by HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Modified Tue Jul 10 05:36:22 JST 2001
+.\" by Yuichi SATO <ysato@h4.dion.ne.jp>, LDP v1.38
+.\" Updated & Modified Wed Dec 29 12:33:12 JST 2004
+.\" by Yuichi SATO <ysato444@yahoo.co.jp>, LDP v2.01
+.\" Updated & Modified Wed Jan 3 04:11:03 JST 2007 by Yuichi SATO, LDP v2.43
+.\" Updated 2008-08-04, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.05
+.\" Updated 2012-05-29, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH FORK 2 2014\-05\-28 Linux "Linux Programmer's Manual"
.SH 名前
fork \- 子プロセスを生成する
.SH 書式
.IP *
子プロセスの親プロセス ID は、親プロセスのプロセス ID と同じである。
.IP *
-子プロセスは親プロセスのメモリロック (\fBmlock\fP(2), \fBmlockall\fP(2)) を引き継がない。
+å\90ã\83\97ã\83ã\82»ã\82¹ã\81¯è¦ªã\83\97ã\83ã\82»ã\82¹ã\81®ã\83¡ã\83¢ã\83ªã\83¼ã\83ã\83\83ã\82¯ (\fBmlock\fP(2), \fBmlockall\fP(2)) ã\82\92å¼\95ã\81\8dç¶\99ã\81\8cã\81ªã\81\84ã\80\82
.IP *
-プロセスの資源利用量 (\fBgetrusage\fP(2)) と CPU タイムカウンタ (\fBtimes\fP(2)) が、子プロセスでは 0
+プロセスの資源利用量 (\fBgetrusage\fP(2)) と CPU タイムカウンター (\fBtimes\fP(2)) が、子プロセスでは 0
にリセットされる。
.IP *
子プロセスの処理待ちのシグナルの集合 (\fBsigpending\fP(2)) は、初期状態では空になる。
.IP *
子プロセスは親プロセスからセマフォ調整 (\fBsemop\fP(2)) を引き継がない。
.IP *
-子プロセスは親プロセスからレコードロック (\fBfcntl\fP(2)) を引き継がない。
+子プロセスは親プロセスからプロセスに関連付けられたレコードロックを引き継がない (\fBfcntl\fP(2))。 (一方、子プロセスは親プロセスから
+\fBfcntl\fP(2) オープンファイル記述ロックと \fBflock\fP(2) ロックを引き継ぐ。)
.IP *
子プロセスは親プロセスからタイマー (\fBsetitimer\fP(2), \fBalarm\fP(2), \fBtimer_create\fP(2))
を引き継がない。
\fBprctl\fP(2) の \fBPR_SET_PDEATHSIG\fP の設定がリセットされ、子プロセスは親プロセスが終了したときに
シグナルを受信しない。
.IP *
-\fBmadvise\fP(2) の \fBMADV_DONTFORK\fP フラグでマークされたメモリマッピングは、 \fBfork\fP()
+timer slack value のデフォルト値には、親プロセスの現在の timer slack value が設定される。 \fBprctl\fP(2)
+の \fBPR_SET_TIMERSLACK\fP の説明を参照。
+.IP *
+\fBmadvise\fP(2) の \fBMADV_DONTFORK\fP フラグでマークされたメモリーマッピングは、 \fBfork\fP()
によって引き継がれない。
.IP *
子プロセスの終了シグナルは常に \fBSIGCHLD\fP である (\fBclone\fP(2) を参照)。
+.IP *
+\fBioperm\fP(2) で設定されるポートアクセス許可ビットは、子プロセスには継承されない。子プロセスでは、 \fBioperm\fP(2)
+を使って必要なビットをセットしなければならない。
.PP
以下の点についても注意すること:
.IP * 3
親プロセスの仮想アドレス空間全体が子プロセスに複製される。 これにはミューテックス (mutex) の状態・条件変数・ pthread
オブジェクトが含まれる。 これが引き起こす問題を扱うには、 \fBpthread_atfork\fP(3) を使うと良いだろう。
.IP *
-å\90ã\83\97ã\83ã\82»ã\82¹ã\81¯è¦ªã\83\97ã\83ã\82»ã\82¹ã\81\8cæ\8c\81ã\81¤ ã\82ªã\83¼ã\83\97ã\83³ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\81®é\9b\86å\90\88ã\81®ã\82³ã\83\94ã\83¼ã\82\92å¼\95ã\81\8dç¶\99ã\81\90ã\80\82 å\90ã\83\97ã\83ã\82»ã\82¹ã\81®å\90\84ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿は、
-親プロセスのファイルディスクリプタに対応する 同じオープンファイル記述 (file description) を参照する (\fBopen\fP(2)
-ã\82\92å\8f\82ç\85§)ã\80\82 ã\81\93ã\82\8cã\81¯ 2 ã\81¤ã\81®ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\81\8cã\80\81ã\83\95ã\82¡ã\82¤ã\83«ç\8a¶æ\85\8bã\83\95ã\83©ã\82°ã\83» ç\8f¾å\9c¨ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82ªã\83\95ã\82»ã\83\83ã\83\88ã\80\81ã\82·ã\82°ã\83\8aã\83«é§\86å\8b\95 (signal\-driven) I/O å±\9eæ\80§
-(\fBfcntl\fP(2) における \fBF_SETOWN\fP, \fBF_SETSIG\fP の説明を参照) を共有することを意味する。
+å\90ã\83\97ã\83ã\82»ã\82¹ã\81¯è¦ªã\83\97ã\83ã\82»ã\82¹ã\81\8cæ\8c\81ã\81¤ ã\82ªã\83¼ã\83\97ã\83³ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81®é\9b\86å\90\88ã\81®ã\82³ã\83\94ã\83¼ã\82\92å¼\95ã\81\8dç¶\99ã\81\90ã\80\82 å\90ã\83\97ã\83ã\82»ã\82¹ã\81®å\90\84ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼は、
+親ã\83\97ã\83ã\82»ã\82¹ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81«å¯¾å¿\9cã\81\99ã\82\8b å\90\8cã\81\98ã\82ªã\83¼ã\83\97ã\83³ã\83\95ã\82¡ã\82¤ã\83«è¨\98è¿° (file description) ã\82\92å\8f\82ç\85§ã\81\99ã\82\8b (\fBopen\fP(2)
+ã\82\92å\8f\82ç\85§)ã\80\82 ã\81\93ã\82\8cã\81¯ 2 ã\81¤ã\81®ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8cã\80\81ã\83\95ã\82¡ã\82¤ã\83«ç\8a¶æ\85\8bã\83\95ã\83©ã\82°ã\83» ç\8f¾å\9c¨ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82ªã\83\95ã\82»ã\83\83ã\83\88ã\80\81ã\82·ã\82°ã\83\8aã\83«é§\86å\8b\95 (signal\-driven) I/O
+属性 (\fBfcntl\fP(2) における \fBF_SETOWN\fP, \fBF_SETSIG\fP の説明を参照) を共有することを意味する。
.IP *
-子プロセスは親プロセスが持つオープンメッセージキューディスクリプタ (\fBmq_overview\fP(7) を参照) の集合のコピーを引き継ぐ。
-å\90ã\83\97ã\83ã\82»ã\82¹ã\81®å\90\84ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\81¯ã\80\81 親ã\83\97ã\83ã\82»ã\82¹ã\81®ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\81«å¯¾å¿\9cã\81\99ã\82\8b å\90\8cã\81\98ã\82ªã\83¼ã\83\97ã\83³ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82ã\83¥ã\83¼ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿を参照する。 これは 2
-つのディスクリプタが同じフラグ (\fImq_flags\fP) を共有することを意味する。
+子プロセスは親プロセスが持つオープンメッセージキューディスクリプター (\fBmq_overview\fP(7) を参照) の集合のコピーを引き継ぐ。
+å\90ã\83\97ã\83ã\82»ã\82¹ã\81®å\90\84ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81¯ã\80\81 親ã\83\97ã\83ã\82»ã\82¹ã\81®ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81«å¯¾å¿\9cã\81\99ã\82\8b å\90\8cã\81\98ã\82ªã\83¼ã\83\97ã\83³ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82ã\83¥ã\83¼ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼を参照する。 これは 2
+ã\81¤ã\81®ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8cå\90\8cã\81\98ã\83\95ã\83©ã\82° (\fImq_flags\fP) ã\82\92å\85±æ\9c\89ã\81\99ã\82\8bã\81\93ã\81¨ã\82\92æ\84\8få\91³ã\81\99ã\82\8bã\80\82
.IP *
子プロセスは、親プロセスのオープン済みのディレクトリストリームの集合 (\fBopendir\fP(3) 参照) のコピーを継承する。
POSIX.1\-2001 では、親プロセスと子プロセス間の対応するディレクトリストリーム はディレクトリストリームの位置 (positioning)
.SH エラー
.TP
\fBEAGAIN\fP
-親ã\83\97ã\83ã\82»ã\82¹ã\81®ã\83\9aã\83¼ã\82¸ã\83»ã\83\86ã\83¼ã\83\96ã\83«ã\81®ã\82³ã\83\94ã\83¼ã\81¨ å\90ã\83\97ã\83ã\82»ã\82¹ã\81®ã\82¿ã\82¹ã\82¯æ§\8bé\80 ã\81«ç\94\9fæ\88\90ã\81«å¿\85è¦\81ã\81ªã\83¡ã\83¢ã\83ªを \fBfork\fP() が割り当てることができなかった。
+親ã\83\97ã\83ã\82»ã\82¹ã\81®ã\83\9aã\83¼ã\82¸ã\83\86ã\83¼ã\83\96ã\83«ã\81®ã\82³ã\83\94ã\83¼ã\81¨ å\90ã\83\97ã\83ã\82»ã\82¹ã\81®ã\82¿ã\82¹ã\82¯æ§\8bé\80 ã\81«ç\94\9fæ\88\90ã\81«å¿\85è¦\81ã\81ªã\83¡ã\83¢ã\83ªã\83¼を \fBfork\fP() が割り当てることができなかった。
.TP
\fBEAGAIN\fP
-呼び出し元の \fBRLIMIT_NPROC\fP 資源の制限 (resource limit) に達したために、新しいプロセスを生成できなかった。
-この制限を超えるには、プロセスは \fBCAP_SYS_ADMIN\fP または \fBCAP_SYS_RESOURCE\fP ケーパビリティ
-(capability) を持っていなくてはならない。
+
+.\" NOTE! The following should match the description in pthread_create(3)
+システムで設定されたスレッド数の上限に達していた。 このエラーの原因となる上限値はいくつかある。 実ユーザー ID
+当たりのプロセス数とスレッド数の上限である、ソフトリソース上限 \fBRLIMIT_NPROC\fP に達していた (\fBsetrlimit\fP(2)
+で設定できる)。 カーネルのシステム全体のプロセスとスレッドの上限数である \fI/proc/sys/kernel/threads\-max\fP が達していた
+(\fBproc\fP(5) 参照)。 PID の最大値 \fI/proc/sys/kernel/pid_max\fP に達していた (\fBproc\fP(5)
+参照)。
+.TP
+\fBEAGAIN\fP
+呼び出し元は、スケジューリングポリシー \fBSCHED_DEADLINE\fP で動作しており、かつ reset\-on\-fork
+フラグがセットされていない。 \fBsched\fP(7) 参照。
.TP
\fBENOMEM\fP
-メモリが足りないために、 \fBfork\fP() は必要なカーネル構造体を割り当てることができなかった。
+メモリーが足りないために、 \fBfork\fP() は必要なカーネル構造体を割り当てることができなかった。
+.TP
+\fBENOSYS\fP
+.\" e.g., arm (optionally), blackfin, c6x, frv, h8300, microblaze, xtensa
+\fBfork\fP() はこのプラットフォームではサポートされていない
+(例えば、メモリー管理ユニット (MMU) がないハードウェア)。
.SH 準拠
SVr4, 4.3BSD, POSIX.1\-2001.
.SH 注意
.PP
-Linux では、 \fBfork\fP() を 書き込み時コピー (copy\-on\-write)・ページを用いて実装している。 したがって、fork
-ã\82\92è¡\8cã\81\86ã\81\93ã\81¨ã\81®å\94¯ä¸\80ã\81®ã\83\87ã\83¡ã\83ªã\83\83ã\83\88ã\81¯ã\80\81 親ã\83\97ã\83ã\82»ã\82¹ã\81®ã\83\9aã\83¼ã\82¸ã\83»ã\83\86ã\83¼ã\83\96ã\83«ã\82\92è¤\87製ã\81¨ å\90ã\83\97ã\83ã\82»ã\82¹è\87ªèº«ã\81®ã\82¿ã\82¹ã\82¯æ§\8bé\80 ã\81®ä½\9cæ\88\90ã\81®ã\81\9fã\82\81ã\81®æ\99\82é\96\93ã\81¨ã\83¡ã\83¢ã\83ªが必要なことである。
+Linux では、 \fBfork\fP() を 書き込み時コピー (copy\-on\-write) ページを用いて実装している。 したがって、fork
+ã\82\92è¡\8cã\81\86ã\81\93ã\81¨ã\81®å\94¯ä¸\80ã\81®ã\83\87ã\83¡ã\83ªã\83\83ã\83\88ã\81¯ã\80\81 親ã\83\97ã\83ã\82»ã\82¹ã\81®ã\83\9aã\83¼ã\82¸ã\83\86ã\83¼ã\83\96ã\83«ã\82\92è¤\87製ã\81¨ å\90ã\83\97ã\83ã\82»ã\82¹è\87ªèº«ã\81®ã\82¿ã\82¹ã\82¯æ§\8bé\80 ã\81®ä½\9cæ\88\90ã\81®ã\81\9fã\82\81ã\81®æ\99\82é\96\93ã\81¨ã\83¡ã\83¢ã\83ªã\83¼が必要なことである。
.\" nptl/sysdeps/unix/sysv/linux/fork.c
.\" and does some magic to ensure that getpid(2) returns the right value.
同じ効果が得られるようなフラグが指定される (\fBfork\fP() の呼び出しは、
\fIflags\fP に \fBSIGCHLD\fP だけを指定して \fBclone\fP(2) を呼び出すのと等価である)。
glibc のラッパー関数は \fBpthread_atfork\fP(3) を使って設定されている
-任意の fork ハンドラを起動する。
+ä»»æ\84\8fã\81® fork ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\82\92èµ·å\8b\95ã\81\99ã\82\8bã\80\82
.SH 例
\fBpipe\fP(2) および \fBwait\fP(2) を参照。
.SH 関連項目
-\fBclone\fP(2), \fBexecve\fP(2), \fBsetrlimit\fP(2), \fBunshare\fP(2), \fBvfork\fP(2),
-\fBwait\fP(2), \fBdaemon\fP(3), \fBcapabilities\fP(7), \fBcredentials\fP(7)
+\fBclone\fP(2), \fBexecve\fP(2), \fBexit\fP(2), \fBsetrlimit\fP(2), \fBunshare\fP(2),
+\fBvfork\fP(2), \fBwait\fP(2), \fBdaemon\fP(3), \fBcapabilities\fP(7), \fBcredentials\fP(7)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。