fcitx重启 linux_用脚本的方法解决fcitx占用大量cpu资源的问题
以下使用腳本的方式解決fcitx在使用當中占用大量cpu資源的問題,同時附有兩個改進的代碼,可以選擇應用。本文的操作系統平臺是Deepin Linux。
背景
用搜狗輸入法的網友肯定有這樣的體驗:在使用過程中計算機風扇突然狂轉起來,然后打開系統監視器一看,發現一個名為fcitx-input-method的進程占用的大量的資源,必須要kill掉重啟才會正常。而出現這個問題的頻率其實很高,每次都要手動kill掉很麻煩。于是我寫了一個bash腳本,在后臺監視fcitx-input-mehtod,一旦它占用的cpu大于10%時,就認為出現了問題,腳本會自動把它kill掉,然后它會自動重啟,問題就解決了。
代碼如下
#!/bin/bash
PROCESS="fcitx"
PID=""
while [ ! $PID ]; do
PID=`pgrep $PROCESS | head -n 1`
done
while [[ 1 ]]; do
CPU=`top -b -p $PID -n 1 | tail -n 1 | awk '{print $9}'`
if [[ $CPU > 10.0 ]]; then
kill $PID
PID=""
while [ ! $PID ]; do
sleep 1
PID=`pgrep $PROCESS | head -n 1`
done
# else
# ? ? ? ? echo normal
fi
sleep 4
done
使用方法
把上面的代碼保存為bash或者sh格式,然后設置為開機自啟或者手動用nohup就能運行在后臺了。
附:改進代碼1
1.說明:把以上的代碼改進了下,不用寫systemd配置文件,直接配置一個.desktop放到~/.config/autostart/下,每次啟動就會自動運行了。
2.代碼如下
#!/bin/bash
PROCESS="fcitx"
PID=""
while [[ 1 ]]; do
while [ ! $PID ]; do
sleep 1
PID=$(pidof $PROCESS)
done
CPU=$(top -b -p $PID -n 1 | tail -n 1 | awk '{print $9}')
if [[ $CPU > 10.0 ]]; then
kill $PID
PID=""
fi
sleep 4
done
附:改進代碼2
1.CPU占用率一時的高還是可以接受的,因此需要增加一個判斷一段時間內的占用率都高的問題, 這里假定間隔時間1s,連續4次CPU占用率都高,才是真的需要kill掉。
2.代碼如下
#!/bin/bash
PROCESS="fcitx"
function get_pid_x { #process
PID=""
while [ ! $PID ]; do
PID=$(pidof $1)
sleep 1
done
echo $PID
}
function get_consume_cpu_process { #PID
echo $(top -b -p $1 -n 1 | tail -n 1 | awk '{print $9}')
}
pid=$(get_pid_x $PROCESS)
while [[ 1 ]]; do
#echo "the fcitx's pid is $pid"
#echo "the fcitx consumes $(get_consume_cpu_process $pid)%"
if [[ $(get_consume_cpu_process $pid) > 10.0 ]]; then
times=4
while [[ times > 0 ]]; do
sleep 1
times=$(($times-1))
if [[ $(get_consume_cpu_process $pid) < 10.0 ]]; then
break
elif [[ $(get_consume_cpu_process $pid) > 10.0 && times = 0 ]]; then
#echo "kill the process $pid."
kill $pid
pid=$(get_pid_x $PROCESS)
#else
#echo "not need to kill the process $pid"
fi
done
fi
sleep 4
done
相關主題
總結
以上是生活随笔為你收集整理的fcitx重启 linux_用脚本的方法解决fcitx占用大量cpu资源的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intel - QPI 总线
- 下一篇: 基于微信有声读物播音小程序系统设计与实现