OSDN Git Service

Retire LDP man-pages repository
[linuxjm/LDP_man-pages.git] / release / man2 / vfork.2
diff --git a/release/man2/vfork.2 b/release/man2/vfork.2
deleted file mode 100644 (file)
index 608f6ba..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-.\" Copyright (c) 1999 Andries Brouwer (aeb@cwi.nl), 1 Nov 1999
-.\"
-.\" %%%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.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\"
-.\" Since the Linux kernel and libraries are constantly changing, this
-.\" manual page may be incorrect or out-of-date.  The author(s) assume no
-.\" responsibility for errors or omissions, or for damages resulting from
-.\" the use of the information contained herein.  The author(s) may not
-.\" have taken the same level of care in the production of this manual,
-.\" which is licensed free of charge, as they might when working
-.\" professionally.
-.\"
-.\" Formatted or processed versions of this manual, if unaccompanied by
-.\" the source, must acknowledge the copyright and authors of this work.
-.\" %%%LICENSE_END
-.\"
-.\" 1999-11-10: Merged text taken from the page contributed by
-.\" Reed H. Petty (rhp@draper.net)
-.\"
-.\"*******************************************************************
-.\"
-.\" This file was generated with po4a. Translate the source file.
-.\"
-.\"*******************************************************************
-.\"
-.\" Japanese Version Copyright (c) 1999 HANATAKA Shinya
-.\"         all rights reserved.
-.\" Translated 1999-12-04, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
-.\" Updated 2007-01-09, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.43
-.\" Updated 2008-11-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.13
-.\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
-.\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
-.\"
-.TH VFORK 2 2012\-08\-05 Linux "Linux Programmer's Manual"
-.SH 名前
-vfork \- 子プロセスを生成し親プロセスを停止させる
-.SH 書式
-\fB#include <sys/types.h>\fP
-.br
-\fB#include <unistd.h>\fP
-.sp
-\fBpid_t vfork(void);\fP
-.sp
-.in -4n
-glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
-.in
-.sp
-\fBvfork\fP():
-.ad l
-.RS 4
-.PD 0
-.TP  4
-glibc 2.12 以降:
-.nf
-_BSD_SOURCE ||
-    (_XOPEN_SOURCE\ >=\ 500 ||
-        _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED) &&
-    !(_POSIX_C_SOURCE\ >=\ 200809L || _XOPEN_SOURCE\ >=\ 700)
-.TP  4
-.fi
-glibc 2.12 より前: _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
-.PD
-.RE
-.ad b
-.SH 説明
-.SS 規格の説明
-(POSIX.1 より引用)  \fBvfork\fP()  関数は \fBfork\fP(2)  と同じ働きをするが、 \fBvfork\fP()
-で作成されたプロセスが \fBvfork\fP()  からの返り値を格納している \fIpid_t\fP 型の変数以外を変更したり、 \fBvfork\fP()
-を呼び出している関数から return したり、 \fB_exit\fP(2)  や \fBexec\fP(3)
-族の関数をコールする前に他の関数をコールした場合の動作が 未定義であるという点が異なる。
-.SS "LINUX での説明"
-\fBvfork\fP()  は \fBfork\fP(2)  と全く同じように呼び出したプロセスの子プロセスを生成する。 詳しい説明と返り値、エラーについては
-\fBfork\fP(2)  を参照すること。
-.PP
-\fBvfork\fP()  は \fBclone\fP(2)  の特殊な場合である。 親プロセスのページテーブルのコピーを行わずに新しいプロセスを
-作成するために使用する。これは性能に敏感なアプリケーションにおいて 子プロセスを生成してすぐに \fBexecve\fP(2)  する場合に有用かもしれない。
-.PP
-\fBvfork\fP() は \fBfork\fP(2) と違い、子プロセスが終了するか、
-\fBexecve\fP(2) をコールするまで呼び出し元のスレッドを停止 (suspend) させる。
-子プロセスの終了は、\fB_exit\fP(2) の呼び出しによる通常終了、致命的なシグナルの
-配送後の異常終了の二つのケースがある。
-この時点までは、子プロセスはスタックを含む全てのメモリーを親プロセスと共有する。
-子プロセスは現在の関数から return してはならず、
-\fBexit\fP(3) もコールしてはならないが、\fB_exit\fP(2) ならばコールしてもよい。
-
-\fBfork\fP(2) と同様に、 \fBvfork\fP() で作成された子プロセスは、
-(ファイルディスクリプター、シグナル配送定義、カレントワーキングディレクトリなどの)
-呼び出し元のプロセスの各種の属性を継承する。
-\fBvfork\fP() では、上で説明した仮想アドレス空間の扱いだけが異なる。
-
-親プロセスへ送られたシグナルは、子プロセスが親プロセスのメモリーを解放した後
-(すなわち、子プロセスが終了するか \fBexecve\fP(2) を呼んだ後) に到着する。
-.SS 歴史的な説明
-Linux において \fBfork\fP(2)  は書き込み時コピー (copy\-on\-write) ページを使用して実装されている。 そのため
-\fBfork\fP(2)  を使用することによって被る損害は親プロセスのページテーブルを 複製するために必要な時間とメモリーだけである。
-しかしながら、忌しき昔には \fBfork\fP(2)  は呼び出したプロセスのデータ空間の全てのコピーしていたが、
-これはしばしば不必要であった。なぜなら、たいていはすぐ後に \fBexec\fP(3)  を実行していたからである。 この場合の効率を上げるために BSD は
-\fBvfork\fP()  システムコールを導入して親プロセスのアドレス空間を完全にコピー するかわりに、 \fBexecve\fP(2)  をコールするか
-exit が起きるまで親プロセスのメモリーと制御スレッド を借りるようにした。 親プロセスは子プロセスがその資源を使用している間は停止された。
-\fBvfork\fP()  は使いにくいものであった: 例えば、親プロセスの変数を変更しな
-いようにするためにはどの変数がレジスターに保持されているかを知らな ければならなかった。
-.SH 準拠
-4.3BSD; POSIX.1\-2001 (廃止予定とされている)。
-POSIX.1\-2008 では \fBvfork\fP() の規定が削除されている。
-
-.\" In AIXv3.1 vfork is equivalent to fork.
-\fBvfork\fP() コールは他のオペレーティングシステムの同名のコールと ちょっと似
-ているかもしれない。規格が \fBvfork\fP() に要求していることは、 \fBfork\fP(2) に要
-求していることよりは弱い。したがって、 両者を同じものとして実装しても、規格に
-準拠していることになる。 特にプログラマーは、子プロセスが終了するか
-\fBexecve\fP(2) を呼び出すまで親プロセスが停止していることや、メモリーを共有するこ
-とによる特殊な動作をあてにすべきではない。
-.SH 注意
-.PP
-\fBvfork\fP() の動作は構造的な欠陥と考える人もいるだろうし、
-BSD のマニュアルには、「このシステムコールは妥当なシステム共有機構が実装さ
-れた場合には削除される。ユーザーは \fBvfork\fP() のメモリー共有機能に依存するべき
-ではない。何故ならば、このシステムコール が削除された場合には、それは
-\fBfork\fP(2) の同義語とされるからである。」と書かれている。しかしながら、
-最近のメモリー管理ハードウェアにより \fBfork\fP(2) と \fBvfork\fP() の間の性能差が
-減ったとはいえ、 Linux や他のシステムで \fBvfork\fP() が残されているのには
-いくつか理由がある:
-.IP * 3
-性能に厳しいアプリケーションでは、 \fBvfork\fP() により得られる
-小さな性能上のメリットが必要な場合がある。
-.IP *
-.\" http://stackoverflow.com/questions/4259629/what-is-the-difference-between-fork-and-vfork
-.\" http://developers.sun.com/solaris/articles/subprocess/subprocess.html
-.\" http://mailman.uclinux.org/pipermail/uclinux-dev/2009-April/000684.html
-\fBvfork\fP() はメモリー管理ユニット (MMU) を持たないシステムでも実装すること
-ができるが、そのようなシステムで \fBfork\fP(2) を実装することはできない。
-(POSIX.1\-2008 では \fBvfork\fP() が標準から削除された。
-\fBposix_spawn\fP(3) 関数の POSIX の原理 (rationale) には、
-\fBfork\fP(2)+\fBexec\fP(3) と等価な機能を提供する \fBposix_spawn\fP(3) は、
-MMU を持たないシステムでも実装できるように設計されたとの注記がある。)
-.SS "Linux での注意"
-\fBpthread_atfork\fP(3)  を使って設定された fork ハンドラーは NPTL
-スレッドライブラリコールを採用したマルチスレッドプログラムでは 呼び出されない。一方、LinuxThreads スレッドライブラリを使った
-プログラムでは、fork ハンドラーは呼び出される。 (Linux のスレッドライブラリの説明は \fBpthreads\fP(7)  を参照。)
-
-\fBvfork\fP() の呼び出しは、以下の \fIflags\fP を指定して \fBclone\fP(2) を呼び出す
-のと等価である。
-
-     CLONE_VM | CLONE_VFORK | SIGCHLD
-.SS 歴史
-.\" In the release notes for 4.2BSD Sam Leffler wrote: `vfork: Is still
-.\" present, but definitely on its way out'.
-\fBvfork\fP()  システムコールは 3.0BSD に現われた。 4.4BSD において \fBfork\fP(2)  の同義語となったが、NetBSD
-では再び導入された。
-.UR http://www.netbsd.org\:/Documentation\:/kernel\:/vfork.html
-.UE
-を参照。
-Linux では 2.2.0\-pre6 あたりまでは \fBfork\fP(2)  と等価であった。(i386 では) 2.2.0\-pre9 から
-(他のアーキテクチャーでは 少し遅れて) 独立したシステムコールとなった。 glibc でのサポートは glibc\-2.0.112 で追加された。
-.SH バグ
-.PP
-.\"
-.\" As far as I can tell, the following is not true in 2.6.19:
-.\" Currently (Linux 2.3.25),
-.\" .BR strace (1)
-.\" cannot follow
-.\" .BR vfork ()
-.\" and requires a kernel patch.
-シグナルの扱いの詳細は不明瞭でシステムごとに異っている。 BSD のマニュアルには、 「デッドロック状態になる可能性があるので \fBvfork\fP()
-の途中の子プロセスに \fBSIGTTOU\fP や \fBSIGTTIN\fP シグナルを送信してはならない; さらに出力や \fIioctl\fP
-は許されるが、入力を試みた場合には結果はファイル終端 (EOF) になる。」 と書かれている。
-.SH 関連項目
-\fBclone\fP(2), \fBexecve\fP(2), \fBfork\fP(2), \fBunshare\fP(2), \fBwait\fP(2)
-.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
-である。プロジェクトの説明とバグ報告に関する情報は
-http://www.kernel.org/doc/man\-pages/ に書かれている。