停止后脚本仍在后台执行

时间:2016-03-14 09:59:22

标签: linux shell gnuplot sh

我正在使用top命令计算 CPU利用率并同时使用gnuplot绘制输出。我正在从top命令获取数据对于cpu_util.txt中的CPU利用率,并将该数据汇总到data.txt

这是我的shell脚本CPU.sh

write_data(){
    top -b -n 1 |awk 'FNR>7 '| awk '{print $9}'>/home/vivek/project/cpu_util.txt

    a="$(cat /proc/cpuinfo | grep 'cpu cores' | wc -l)"

    awk '{s+=$1} END {printf "%.0f\n", (s/'"${a}"')}' /home/vivek/project/cpu_util.txt>>/home/vivek/project/data.txt

    sleep 5 
}

write_file(){
    while :
    do
        write_data
    done
}

plot_data()
{
    gnuplot liveplot.gnu
}


write_data

write_file &
plot_data 

这是我的gnuplot文件liveplot.gnu

set title "CPU utilization"
plot "../data.txt" with lines title 'usage in %'
pause 5
reread

当我同时运行write_fileplot_data时。当我停止此脚本时,plot_data会停止,但write_file会在后台执行。 我不明白为什么该脚本仍在运行,如何在退出脚本的同时停止write_file

1 个答案:

答案 0 :(得分:0)

写一个清理函数并捕获信号。将其附加到文件末尾。

function finish {
    pkill -f write_file
    pkill -f plot_data
    exit
}
trap finish SIGHUP SIGINT SIGTERM

sighup,sigint和sigterm用于停止进程。您也可以使用其他信号