2017-10-24 9 views
0

私はCで簡単なツリーを作成しなければならないという課題を練習してきました。基本的に、メインプロセスはfork()を使用して子プロセスを作成し、終了します。子プロセスはメッセージを出力し、それ自身の子プロセスを作成し、それも終了します。このプロシージャは3回繰り返します。まあ、それは明らかに実行中のどこかで正常に動作しています。私は奇妙な出力(実行可能ファイルが存在するディレクトリを出力します)があります。私はコードと端末からの出力を共有しています。 (出力メッセージは、スペイン語でそのことについて申し訳ありません):プロセスの単純なツリーを作成するときに奇妙な出力が発生する

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 


int main(){ 
    int i; 
    pid_t cpid[3]; 
    printf("¡Hola, soy el proceso padre!\n"); 
    for (i=0;i<3; i++){ 
     cpid[i] = fork(); 
     if (cpid[i] == 0){ 
      printf("¡Hola, soy el proceso hijo N°%i!\n",i+1); 
     }else{ 
      printf ("Terminando proceso %i....\n",i); 
      exit (EXIT_SUCCESS); 
     } 
    } 
    printf ("Terminando proceso %i....\n",i); 
    return 0; 
} 

そして、この私の出力:

[email protected]:~/Escritorio/Práctica #1 - Solución/Ejercicios programados$ gcc -o foo ejercicio23.c 
[email protected]:~/Escritorio/Práctica #1 - Solución/Ejercicios programados$ ./foo 
¡Hola, soy el proceso padre! 
Terminando proceso 0.... 
[email protected]:~/Escritorio/Práctica #1 - Solución/Ejercicios programados$ ¡Hola, soy el proceso hijo N°1! <---- WEIRD OUTPUT 
Terminando proceso 1.... 
¡Hola, soy el proceso hijo N°2! 

それは、実行可能ファイルは、の真ん中にあるディレクトリを示していますなぜ私にはわかりません実行、理由の任意のアイデア?

ありがとうございます! :-)

答えて

1

子供のプロセスが終了するのを待っているわけではありません。

最初のプロセスを実行し、新しいプロセスを一括して終了して終了します。 を終了すると、プロンプト(現時点では現在の作業ディレクトリを含む)が返されます。その後、あなたが始めた他のプロセスは準ランダムに実行され、自分のものを印刷して終了します。

+0

私は、メインプロセスを終了するのでプロンプトに戻ります。終了すると、子プロセスがまだ起動しています。ありがとう! –

+0

@FrankPonte Right。親が退去するだけで子プロセスに特別なことは起こりません。副次的なこととして、短いパスをスペースなしで使用すると、より簡単な時間を持つことがよくあります。 (「プラクティカ#1 - ソルシオン」は、例えば「プラクカ-1ソルシオン」とすることができる)。 – cnicutar

+0

私は心にそれを持っているよ、ありがとう! –

関連する問題