我正在尝试创建一个使用电影作为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
doneidletime程序实际上与xprintidle相同...它使用X Server来获取系统的空闲时间。test.sh脚本如下所示:
#!/bin/bash
mplayer -nostop-xscreensaver movie.mp4 -fs -loop 0谢谢!
发布于 2014-08-19 06:36:53
可能发生的是拒绝服务攻击。
如果您有两个mplayer进程,脚本将开始轰炸系统,尽可能快地启动无限数量的mplayer。
使用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 sleep 1替换while true,这将在不损失功能的情况下将脚本的CPU使用率从100%降低到<1%。
https://stackoverflow.com/questions/25372466
复制相似问题