云网牛站
所在位置:首页 > Linux教程 > 用脚本的方法解决fcitx占用大量cpu资源的问题

用脚本的方法解决fcitx占用大量cpu资源的问题

2018-09-20 11:39:03作者:ritter稿源:LINUX社区

以下使用脚本的方式解决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

 

相关主题

Ubuntu 16.04如何安装Fcitx五笔拼音输入法

精选文章
热门文章