(下面有代碼)
事情起因:學校的上網賬號 同一時間只能登一個,, 而實驗室和宿捨都得使用這個賬號上網
所以有時候在離開實驗室回去時,會忘記將上網程序退出。導致回宿捨後沒法上網, 又得打電話回去讓別人幫忙退出。。。
所以才有此想法。
在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 命令顯示出終端空閒時間 (只是個參考)