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

名称
ライブラリ
書式
解説
関連項目
戻り値
バグ
歴史

jman



Time: 07:06:32 GMT, January 12, 2009