歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

使用Shell讓其在系統空閒一段時間後自動結束指定進程

(下面有代碼)

事情起因:學校的上網賬號 同一時間只能登一個,, 而實驗室和宿捨都得使用這個賬號上網

所以有時候在離開實驗室回去時,會忘記將上網程序退出。導致回宿捨後沒法上網, 又得打電話回去讓別人幫忙退出。。。

所以才有此想法。

在Windows上我是用的其自帶的計劃任務的方法:當系統空閒如15分鐘時,就執行結束指定進程

現在有時候需要使用Linux( Ubuntu)  , 上面沒有類似的東西 ,,有個TMOUT ,但是是空閒到時間後,就注銷用戶(我不想注銷)

故而找shell腳本解決的方法。

最後找到使用Ubuntu 中的屏幕保護進程的狀態(他的原理就是當系統空閒一定時間後,自動鎖住屏幕), 而這個狀態是可以通過

gnome-screensaver-comman -q命令查詢的,,所以

shell如下:(我的上網程序是mentohust (銳捷的替代品))

  1. #!/bin/sh   
  2. # 本程序用來在空閒一定時間後,結束指定程序   
  3.   
  4. #   /usr/bin/mentohust -k # mentohust 可以用此方法結束mentohust進程   
  5.   
  6. taskkill()  
  7. {  
  8.     if [ $# -ne 2 ]; then   
  9.       PID=`ps ax | grep $1 | awk '{if ($0 !~/grep/) {print $1}}'`  
  10. #         echo "PID=$PID"   
  11.         if [ -n "$PID" ]; then   
  12.             kill -9 $PID >/dev/null 2>&1  
  13.         fi  
  14.         return 0  
  15.     fi  
  16. #echo "num:$"   
  17.     return 1  
  18. }  
  19.   
  20. PROCESS="mentohust"  
  21.   
  22. STATE_ACTIVE="屏幕保護程序狀態為不活動"  
  23. STATE_UNACTIVE="屏幕保護程序狀態為活動"  
  24.   
  25. while true  
  26. do  
  27.     STATE=`gnome-screensaver-command -q 2>/dev/null`  
  28.     if [ "$STATE" = "$STATE_UNACTIVE" ]; then  
  29.         taskkill $PROCESS  
  30.     elif [ "$STATE" = "$STATE_ACTIVE" ]; then  
  31.         eval $PROCESS >/dev/null 2>&1 # 當登陸時,再執行進程. 我想結束的mentohust本來就是守護進程,自動後台執行   
  32.     fi  
  33.     sleep 30  
  34.   
  35. done  
讓其自動登陸時啟動的話,,

就在~/.bashrc最後加上如:

/home/xx/bin/killprocess & #"&"不能少,因為是後台運行

ps:  這個空閒多久的時候就是gnome-screensaver即屏幕保護程序激活時間是一樣的。

如果想改變時間,就改變屏幕保護程序的時間!!   

如果不是桌面環境的話,只是終端時。 可以使用 w -u 命令顯示出終端空閒時間 (只是個參考)

Copyright © Linux教程網 All Rights Reserved