1

さまざまなプロセスを実行して簡単なメッセージを出力するために、fork()を使用します。コードの結果は私を混乱させます。コードを見てください。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <math.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>


int main(void)
{

    fork();
    fork();
    fork();
    fprintf(stderr,"hello world\n");

}

出力は次のとおりです。

mario@ubuntu:~/OS$ ./main
hello world
hello world
hello world
hello world
hello world
hello world
mario@ubuntu:~/OS$ hello world
hello world

mario@ubuntu:~/OS$ 

ターミナルの最初の行でプログラムを実行しますが、出力が期待したものではないことに注意してください。私を助けてください!前もって感謝します!fprintfをprintf( "......")で変更しても、同じことが起こります。

編集:なぜプリントがこのようになっているのか理解できません。ターミナルラインの前に6つ、その隣に1つ、その後に1つ...

4

2 に答える 2

3

親プログラムが終了すると、親プログラムを実行しているシェルがシェルプロンプト mario@ubuntu:~/OS$を画面に出力しました。それまでに印刷されていなかった子プログラムはhello world、プロンプトの後に印刷されます。すべてのhello worldの前にプロンプ​​トが表示されないようにする場合は、すべての子プログラムと孫プログラムが終了するのを親に待機させる必要があります。

親を待たせる方法を確認するには、これを確認してください。

于 2012-11-29T18:44:36.637 に答える
0

8つのプロセスを作成しています。それぞれforkがプロセスを2つに分割します。元の親が、まだ実行中の他のプロセスを終了します。したがって、元のプロセスが実行を終了すると、他のプロセスがまだ実行されているにもかかわらず、シェルが実行され、プロンプトが出力されます。

于 2012-11-29T18:47:34.977 に答える