2017-01-14 5 views
0

私はexecのファイルを最大5回別のファイルに保存して結果を保存しようとしています。私はフォーク-execの待ちループのためにを使用し、これは次のように、それがどのように見えるかです:問題があるコマンドラインのexec exec待ちループ

for(i = 0; i< Number_of_Processes; i++){ 
      pid = fork(); 
      if(pid == 0) 
      { 
       execl(...); 
       exit(EXIT_Failure); 
      } 
      else if(pid > 0) 
      { 
       wait(&status); 
       result = WEXITSTATUS; 
      } 
} 

、それは(最初に第二のファイルが正しく、その後5回の最初の結果を印刷し直し実行しますまたはユーザーが入力したもの) pid == 0のときにブレークのように多くの方法を試しましたが、機能しませんでした。私はループ内でexecを使用する方法の適切な例を見つけることができませんでしたので、数時間立ち往生し、機能を上下させて何も得られませんでした。 私は何をしても、内部ファイルの2回目の実行を見ることができません。それはタイミングの問題だった私は、子プロセスでexeclsleep(1)を追加するとき

+0

を印刷しますか?ちなみに、 'WEXITSTATUS'はあなたの' status'の値をとるマクロです。例[here](http://man7.org/linux/man-pages/man2/waitpid.2.html)を参照してください。 – chrisaycock

+0

@chrisaycock @chrisaycock私の結果の最初の行は私のコードに基づいていますが、2行目と他の行はexecが1回以上実行されなかった最初の行と同じです – yasamin

+1

'pid'あなたは待っています、私は 'wait'の代わりに' waitpid'を使うことをお勧めします。あなたは間違った子供の終わりを捉えているかもしれません。 – DyZ

答えて

0

はどうやら、それが印刷されてどのような結果のすべてを固定し、一つ一つに必要なプロセスをexecedし、真の結果

for(i = 0; i< Number_of_Processes; i++){ 
      pid = fork(); 
      if(pid == 0) 
      { 
       sleep(1); 
       execl(...); 
       exit(EXIT_Failure); 
      } 
      else if(pid > 0) 
      { 
       wait(&status); 
       result = WEXITSTATUS; 
      } 
}