VvZX(qvZX)Afork()VXeR[gpBVXeR[oAovZXmAvZXRs[B ovZXevZXARs[VvZXqvZXBevZXAqvZXfork()lpB evZXAfork()qvZXvZXIDpAqvZX0pBplAevZXqvZXッBlBAqvZXPvOヲB int main(void){ pid_t child // fork()li[ if( !(child=fork()) ){ // child=0qvZX printf("inchildprocess\n"); exit(0); } // evZXqvZXID\ヲ prinft("inparentprocess:childprocessID=%d\n,child); return 0; }
コンピューター:C言語講座:fork,exec,pipeについて このテーマはどちらかというとUNIX系の話題になってしまうのですが、PC系ではDOSの時代にはマルチタスクができませんでしたので、平行には走れませんでしたが、C言語の処理系独自の関数がたくさんありました。WindowsになってからはUNIX系と似てきましたが、まだ少し違うようです。 自分で作成したプログラムから他のコマンドを実行したい、ということは良くあることだと思います。例えば、ディレクトリーの中身を簡単に得たい場合などはUNIXではlsコマンドを実行させて、結果をもらうのが簡単に思い付くと思います。とくにUNIXのコマンドはそのように組み合わせて使いやすくできていて、必要な情報だけを明確に返答するコマンドがほとんどです(その分、初心者が自分でコマンドを使う時に不親切なのですが)。 system() 大抵の人が上記のような
forkはプロセスのコピーを作成する.そしてwaitで待つ.処理の流れが一本から複数に分かれる様がフォークみたいだからforkなのだろうか. forkで何がコピーされるのか forkのサンプル wait waitのサンプル ゾンビプロセスについて forkで何がコピーされるのかforkはそれを実行したプロセスの子プロセスを作成する.子プロセスは親プロセスのコピーである.プロセスをどこまで実行したか(プログラムカウンタ?)もコピーされるので,子プロセスはforkの返り値が返るところから実行される(と,思う).あと,ファイルディスクリプタなどもオープンされていればそのままコピーされる.コピーされないのはpidやppidとファイルロックやサスペンド中のシグナルぐらいだろうか.そして,そのforkの返り値によって,プロセスは自分が親プロセスか子プロセスかを知ることができる. 成功すれば子プロセスに
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く