我正在使用 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_file
和plot_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/