我正在尝试创建一个脚本以将电影用作ScreenSaver,但是一旦打开电影,系统就会冻结并重新启动。
我一直在拔头发,因为我无法弄清楚为什么会这样。我在另一台机器上尝试了相同的脚本,它可以在很多个月内完美运行......
它所使用的机器是Linux Mint 13机器,而它没有使用的机器是Linux Mint 17机器。
脚本如下:
#!/bin/bash
screen_on=false;
state=0;
time_idle=1200;
while true;do
IDLE=$(./idletime)
if [ $IDLE -gt $time_idle ];then
if [ $(pidof mplayer) ];then
echo "Screen is on " >> mylog.log
else
./test.sh &
fi
else
if [ $(pidof mplayer) ];then
pkill mplayer
else
echo "Screen is off." >> mylog.log
fi
fi
done
idletime程序实际上与xprintidle相同......它使用X Server来获取系统的空闲时间。 test.sh脚本如下:
#!/bin/bash
mplayer -nostop-xscreensaver movie.mp4 -fs -loop 0
谢谢!
答案 0 :(得分:2)
可能发生的是拒绝服务攻击。
如果你有两个mplayer进程,你的脚本就会开始轰炸系统,尽快启动无限数量的mplayers。
使用shellcheck。它会警告你if [ $(pidof mplayer) ]
中缺少引号。正确的代码是:
if [ "$(pidof mplayer)" ]
then
echo "There is one or more mplayer processes"
else
echo "There are no mplayer processes."
fi
可以更直接地写为
if pidof mplayer > /dev/null
then
...
PS:您还可以将while true
替换为while sleep 1
,这会将脚本的CPU使用率从100%降低到<1%而不会丢失功能。