2016-05-02 8 views
0

パフォーマンスデータを収集してフォアグラウンドでアプリケーションを実行するバックグラウンドでプログラムを実行したい。フォアグラウンドアプリケーションが終了すると、これを検出し、バックグラウンドでアプリケーションを閉じます。問題は、バックグラウンドアプリケーションが最初にファイルを閉じずに閉じるときに、ファイルの出力が空のままであると仮定していることです。バックグラウンドアプリケーションが予期せず終了した場合、出力が保存されるように、出力ファイルを常に書き込む方法はありますか?ここでプログラムを終了するが、出力ファイルが書き込まれないようにするシェルスクリプト

は私のシェルスクリプトです:

./background_application -o=output.csv & 
background_pid=$! 

./foreground_application 
ps -a | grep foreground_application 
if pgrep foreground_application > /dev/null 
then 
    result=1 
else 
    result=0 
fi 

while [ result -ne 0 ] 
do 
    if pgrep RPx > /dev/null 
    then 
      result=1 
    else 
      result=0 
    fi 
    sleep 10 
done 
kill $background_pid 
echo "Finished" 

私はCで書かれたバックグラウンドアプリケーションのソースコードへのアクセス権を持つ++、それは基本的なループであるとにfflush(OUTPUTFILE)ごとにループ反復を実行します。

答えて

1

これは短くなります

./background_application -o=output.csv & 
background_pid=$! 
./foreground_application 
cp output.csv output_last_look.csv 
kill $background_pid 
echo "Finished" 
+1

私は、フォアグラウンドアプリケーションも閉じられている場合、バックグラウンドのアプリケーションを強制終了します。バックグラウンドアプリケーションが適切に閉じない限り、出力ファイルは空のままです。私は、バックグラウンドアプリケーションが終了した場合にデータが失われないように常にファイルに書き込む方法があるかどうか疑問に思っていました。 – kaminsknator

+0

バックグラウンドアプリケーションを終了する直前に、_output.csv_を_output_last_look.csv_にコピーするように修正されました。結果のコピーに必要な出力データがあるかどうかを確認してください。注:上記のコードでは、フォアグラウンドアプリケーションは_foreground_にあります - したがって、フォアグラウンドアプリケーションが閉じられた後にのみ 'kill'が発生します。 – agc

+1

バックグラウンドアプリケーションの実行中に出力ファイルが作成されますが、プログラムが正常に終了するまでは空です。あなたの助けてくれてありがとう、私はシェルスクリプト – kaminsknator

関連する問題