VFORK
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
vfork
- 効率的な方法で仮想メモリに新しいプロセスを生成
索引
ライブラリ
Lb libc
索引
書式
In unistd.h
Ft pid_t
Fn vfork void
索引
解説
Fn vfork
システムコールは、古いプロセスのアドレス空間を完全にコピーせずに、
新しいプロセスを作成できます。
ページングする環境では、古いプロセスのアドレス空間を完全にコピーすることは、
非常に非効率的です。
fork(2)
する目的が、
execve(2)
のための新しいシステムコンテキストの作成である場合に有効です。
Fn vfork
システムコールは、
execve(2)
を呼び出すか、終了する
( _exit2
を呼び出すか異常終了する) まで子が親のメモリと制御スレッドを借りるという点で、
fork(2)
と異なります。
親プロセスは、子がリソースを使用している間停止されます。
Fn vfork
システムコールは、0 を子のコンテキストに、そして (後に) 子の pid を
親のコンテキストに戻します。
通常の場合、
Fn vfork
システムコールは
fork(2)
のように使用できます。
しかし、
Fn vfork
を呼び出したプロシージャから子のコンテキストで動作している間に
動作して戻ることはありません。
最終的に
Fn vfork
から戻ると、存在しないスタックフレームに戻るからです。
execve(2)
を実行できない場合は、
exit(3)
ではなく、
_exit2
を呼び出してください。
exit(3)
は標準入出力チャネルをフラッシュして閉じるため、
親プロセスの標準入出力データ構造体を壊してしまいます
( fork(2)
でも、バッファに入っているデータが 2 回フラッシュされるので、
exit(3)
を呼び出さないでください)。
索引
関連項目
execve(2),
_exit2,
fork(2),
rfork(2),
sigvec(2),
wait(2),
exit(3)
索引
戻り値
fork(2)
と同じです。
索引
バグ
このシステムコールは、適切なシステム共有メカニズムが実現したときに
削除されます。
削除された場合は、
fork(2)
と同義になるので、
Fn vfork
のメモリ共有の現実装には依存しないでください。
デッドロックを避けるため、
Fn vfork
の途中で子になるプロセスには、
SIGTTOU
シグナルや
SIGTTIN
シグナルが送信されません。
その代わりに出力、または、
ioctl(2)
呼び出しが許可され、入力しようとすると EOF となります。
索引
歴史
Fn vfork
システムコールは、
BSD 2.9
で登場しました。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 関連項目
-
- 戻り値
-
- バグ
-
- 歴史
-
Time: 07:06:32 GMT, January 12, 2009