(下面有代碼)
事情起因:學校的上網賬號 同一時間只能登一個,, 而實驗室和宿舍都得使用這個賬號上網
所以有時候在離開實驗室回去時,會忘記將上網程序退出。導致回宿舍後沒法上網, 又得打電話回去讓別人幫忙退出。。。
所以纔有此想法。
在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 & #"&"不能少,因爲是後臺運行
如果想改變時間,就改變屏幕保護程序的時間!!
如果不是桌面環境的話,只是終端時。 可以使用 w -u 命令顯示出終端空閒時間 (只是個參考)
轉載註明出版:http://blog.csdn.net/fdl19881/article/details/7420374