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)ごとにループ反復を実行します。
私は、フォアグラウンドアプリケーションも閉じられている場合、バックグラウンドのアプリケーションを強制終了します。バックグラウンドアプリケーションが適切に閉じない限り、出力ファイルは空のままです。私は、バックグラウンドアプリケーションが終了した場合にデータが失われないように常にファイルに書き込む方法があるかどうか疑問に思っていました。 – kaminsknator
バックグラウンドアプリケーションを終了する直前に、_output.csv_を_output_last_look.csv_にコピーするように修正されました。結果のコピーに必要な出力データがあるかどうかを確認してください。注:上記のコードでは、フォアグラウンドアプリケーションは_foreground_にあります - したがって、フォアグラウンドアプリケーションが閉じられた後にのみ 'kill'が発生します。 – agc
バックグラウンドアプリケーションの実行中に出力ファイルが作成されますが、プログラムが正常に終了するまでは空です。あなたの助けてくれてありがとう、私はシェルスクリプト – kaminsknator