2016-05-02 20 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

相关问题