使用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 命令顯示出終端空閒時間 (只是個參考)


轉載註明出版:http://blog.csdn.net/fdl19881/article/details/7420374

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章