2016-05-02 49 views
0

我想在後臺運行一個程序,收集一些性能數據,然後在前臺運行一個應用程序。當前臺應用程序完成時,它檢測到這一點並在後臺關閉應用程序。問題是,當後臺應用程序關閉時沒有先關閉文件,我假設文件的輸出保持空白。有沒有辦法不斷地寫輸出文件,以便如果後臺應用程序意外關閉輸出保存?Shell腳本終止程序,但導致輸出文件不被寫入

這裏是我的shell腳本:

./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

當後臺應用程序正在運行時,它會創建輸出文件,但在程序正常關閉之前它是空的。感謝您的幫助,我會嘗試shell腳本 – kaminsknator

相關問題