linux - 停止后脚本仍在后台执行

标签 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

最佳答案

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

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

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

关于linux - 停止后脚本仍在后台执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35984392/

相关文章:

php - 使用 PHP 控制用户输入的 Javascript/HTML/textarea 并防止 iframe hack

linux - 运行 Docker 镜像

linux - 从 bash 识别 mongo 服务器状态

shell - 避免 zsh 命令行中的递归

gnuplot - 如何在 gnuplot 中从相同的标准输入数据绘制多个图?

gnuplot - 绘制两个具有不同时间格式的文件

regex - grep 仅在两个字符串之间的区域

bash - 试图通过 shell 脚本终止进程

linux - 在 curl 中拆分标题和内容

gnuplot - 通过管道将绘图数据传输至 gnuplot 脚本