本文主要是介绍移动硬盘的防卡保护脚本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
要往一个Portable SSD上不停写入,在这个过程中,已经遇到过几次移动硬盘卡死。因为没有及时发现,一般都已经卡死了很久了。
症状:对应在移动硬盘上的进程%CPU一直在90%以上。
一般处理手法:强制Eject
为了保护一下ssd 的寿命于是,
k=0
MEGA=10
urgent=850
breaking=60
while true; do
#第一步得到相关的命令的各资源占用OUTPUT=`ps aux|head -1;ps aux|grep "some_command"`DUTPUT=`echo "${OUTPUT}" |grep -v 'grep'` #grep 本身这一条要去掉#echo "$DUTPUT"
#第二步得到他的CPU占用array_all=(${DUTPUT/\t/})CPU_SIGN=`echo "${array_all[13]}"`
#第三步把得到的CPU_SIGN放大十倍,注意这里得到的CPU_SIGN其实是个字符串,要变成小数CPU_SIGN=$(awk '{print $1*$2}' <<<"${CPU_SIGN} ${MEGA}")#$(这个是为了恢复vim正常的语法高亮,可忽略#echo "$CPU_SIGN"
#如果没事,就breakif [ $CPU_SIGN -lt $urgent ]; thenbreakfi
#如果可能有事....k=$[k+1]
#确定有事,于是第四步找出移动硬盘上的在运行的bash窗口if [ $k -gt $breaking ]; thenCMD_OUT=$(diskutil unmountDisk /dev/disk2 2>&1 ) #抓住unmount的错误输出CMD_PUT=`echo "${CMD_OUT}" |grep 'PPID'` #PPID取巧拿法PPID_NUM=`echo "${CMD_PUT}" | egrep -o -E '[0-9]+'`#echo $PPID_NUM
#第五步干掉爷爷进程,然后unmountkill $PPID_NUMsleep 2diskutil unmountDisk /dev/disk2breakfisleep 5
done
最后,做成一个30分钟启动一下的定时任务。
这篇关于移动硬盘的防卡保护脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!