気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/13 14:09
回答4件
0
質問で提示されている図中の「forkから復帰」とは、fork()を呼び出してからその呼び出しが終わった状態のことを指しています。下のコードの(1)としている場所です。
ちなみに同図の「即座にexec()を発行してechoを実行開始」は(2)としているexeclp()を実行した後の状態です。
C
1pid_t pid; 2int status; 3 4pid = fork(); 5/* (1) ここが「forkから復帰」した際の位置。*/ 6/* fork()によって2つになった親プロセスも子プロセスも両方共ここを通る。 */ 7if ( pid < 0 ) { 8 /* fork()に失敗した場合のエラー処理など */ 9} 10else if ( pid == 0 ) { 11 /* 子プロセスはここを通る */ 12 13 /* (2) 子プロセスを「echo」プロセスにする。execに成功するとここには帰ってこない。 */ 14 execlp( "echo", "echo", "hoge", NULL ); 15 /* execに失敗した場合のみここに来る。*/ 16 exit( 1 ); 17} 18 19/* 親プロセスはここを通る */ 20 21/* 子プロセス終了まで待つ */ 22wait( &status );
投稿2020/08/13 16:30
編集2020/08/13 16:53総合スコア1248
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
forkした後、forkに関連して出来るのは、
・プロセスを終了する
・親プロセスが子プロセスの終了を待つ
だけなので、おそらくどちらかのことでしょうが、その人が「復帰」という言葉で何を言いたいのかは、本人に聞くか文脈から推測するしか無いです。
文字通りの意味だとすると、上記のどちらでもなくfork
システムコール自体からの復帰という意味になります。fork
システムコールから復帰した時点で、子プロセスが生成されていますので、自分が親か子かを判別して、それぞれその次の処理を行います。
#追記
図を見ましたが、上記後半の文字通りの意味でしたね。
プログラムが、プロセスの生成を行うfork
関数(システムコール)を呼んで、OSカーネル内でプロセスの生成が行われてfork
関数から戻ってきたらという意味です。
投稿2020/08/13 13:51
編集2020/08/13 15:09総合スコア84786
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/13 14:12
2020/08/13 15:10 編集
2020/08/13 15:50
2020/08/14 01:51
0
teratailの以前の質問(Linuxでの fork()について)
は理解の役にたちませんでしょうか。
投稿2020/08/13 13:25
総合スコア1167
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
waitの事かなと。
投稿2020/08/13 13:15
総合スコア923
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/13 13:20
2020/08/13 13:37
2020/08/13 14:40
2020/08/13 14:52
2020/08/13 15:14
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。