使用Shell让其在系统空闲一段时间后自动结束指定进程
(下面有代码)
事情起因:学校的上网账号 同一时间只能登一个,, 而实验室和宿舍都得使用这个账号上网
所以有时候在离开实验室回去时,会忘记将上网程序退出。导致回宿舍后没法上网, 又得打电话回去让别人帮忙退出。。。
所以才有此想法。
在Windows上我是用的其自带的计划任务的方法:当系统空闲如15分钟时,就执行结束指定进程
现在有时候需要使用Linux( Ubuntu) , 上面没有类似的东西 ,,有个TMOUT ,但是是空闲到时间后,就注销用户(我不想注销)
故而找shell脚本解决的方法。
最后找到使用Ubuntu 中的屏幕保护进程的状态(他的原理就是当系统空闲一定时间后,自动锁住屏幕), 而这个状态是可以通过
gnome-screensaver-comman -q命令查询的,,所以
shell如下:(我的上网程序是mentohust (锐捷的替代品))
- #!/bin/sh
- # 本程序用来在空闲一定时间后,结束指定程序
- #
- # /usr/bin/mentohust -k # mentohust 可以用此方法结束mentohust进程
- taskkill()
- {
- if [ $# -ne 2 ]; then
- PID=`ps ax | grep $1 | awk '{if ($0 !~/grep/) {print $1}}'`
- # echo "PID=$PID"
- if [ -n "$PID" ]; then
- kill -9 $PID >/dev/null 2>&1
- fi
- return 0
- fi
- #echo "num:$"
- return 1
- }
- PROCESS="mentohust"
- STATE_ACTIVE="屏幕保护程序状态为不活动"
- STATE_UNACTIVE="屏幕保护程序状态为活动"
- while true
- do
- STATE=`gnome-screensaver-command -q 2>/dev/null`
- if [ "$STATE" = "$STATE_UNACTIVE" ]; then
- taskkill $PROCESS
- elif [ "$STATE" = "$STATE_ACTIVE" ]; then
- eval $PROCESS >/dev/null 2>&1 # 当登陆时,再执行进程. 我想结束的mentohust本来就是守护进程,自动后台执行
- fi
- sleep 30
- done
就在~/.bashrc最后加上如:
/home/xx/bin/killprocess & #"&"不能少,因为是后台运行
ps: 这个空闲多久的时候就是gnome-screensaver即屏幕保护程序激活时间是一样的。
如果想改变时间,就改变屏幕保护程序的时间!!
如果不是桌面环境的话,只是终端时。 可以使用 w -u 命令显示出终端空闲时间 (只是个参考)
相关推荐
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20