歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> 使用Shell讓其在系統空閒一段時間後自動結束指定進程

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

日期:2017/3/1 10:25:02   编辑: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. taskkill()
  6. {
  7. if [ $# -ne 2 ]; then
  8. PID=`ps ax | grep $1 | awk '{if ($0 !~/grep/) {print $1}}'`
  9. # echo "PID=$PID"
  10. if [ -n "$PID" ]; then
  11. kill -9 $PID >/dev/null 2>&1
  12. fi
  13. return 0
  14. fi
  15. #echo "num:$"
  16. return 1
  17. }
  18. PROCESS="mentohust"
  19. STATE_ACTIVE="屏幕保護程序狀態為不活動"
  20. STATE_UNACTIVE="屏幕保護程序狀態為活動"
  21. while true
  22. do
  23. STATE=`gnome-screensaver-command -q 2>/dev/null`
  24. if [ "$STATE" = "$STATE_UNACTIVE" ]; then
  25. taskkill $PROCESS
  26. elif [ "$STATE" = "$STATE_ACTIVE" ]; then
  27. eval $PROCESS >/dev/null 2>&1 # 當登陸時,再執行進程. 我想結束的mentohust本來就是守護進程,自動後台執行
  28. fi
  29. sleep 30
  30. done
讓其自動登陸時啟動的話,,

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

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

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

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

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

Copyright © Linux教程網 All Rights Reserved