2010-07-22 36 views
0

我想請求一些幫助,創建一個批處理文件在Windows服務器上運行,該服務器將監視有時會得到「卡住「並在他們被殺後流連忘返。Pslist/PsKill需要批處理文件幫助當進程超過特定的年齡(耗用時間)

比較特別,我可以看到一個過程的「年齡」在PsList將命令 http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx

Name    Pid Pri Thd Hnd Priv  CPU Time Elapsed Time 
FMSCore   4908 8 146 892 750720  0:01:46.221  4:02:15.907 
FMSCore   4780 8 144 943 853060  0:00:42.510  4:02:15.348 
FMSCore   3532 8 146 878 553784  0:01:30.262  2:04:56.969 
FMSCore   5384 8 147 753 45484  0:00:03.198  0:05:11.267 
FMSCore   9548 8 133 608 17408  0:00:00.592  0:00:34.298 

下一步的執行時間列,是我唯一想殺死這比4年長流程小時。所以我相信我們需要解析我的PsList命令的結果,提取最後一列,解析幾個小時,如果我們發現它「足夠老」,我們解析出它的PID並殺死它。

如果我們在討論bash或其他一些腳本語言,我想我可以弄明白,但對於批處理腳本,我不知道。

建議?

(注:我會願意運行AutoIt腳本或別的東西,如果需要的話)

回答

1

所以我實際上想到了這個o我必須使用AutoIt和額外的過濾器來查看每個進程的命令行參數,然後查看每個進程的流逝時間,然後查殺舊的進程。

下面是完整的信息:

http://zeroasterisk.com/2010/07/23/adobe-connect-fmscore-process-killer/

我們已經建立連接到2個小時後過期的FMSCore過程,但如果有人仍然連接到一個記錄,它會保留舊的殭屍FMSCore過程直到該人斷開連接。

它經常發生不起作用 - 並且看起來似乎沒有垃圾收集來清理舊的FMSCore。

所以我們創建了可以被編譯到其工作的一個EXE一個簡單的AutoIt腳本,但它有一些依賴關係......

以下相關性/命令都必須到位:

  • C: \ Windows \ System32下\ PV。EXE
  • C:\ WINDOWS \ SYSTEM32 \ pslist.exe
  • C:\ WINDOWS \ SYSTEM32 \ pskill.exe

它是如何工作

  • 腳本使用pv.exe找到包含「flvplayerapp」(僅用於已記錄課程)的命令行參數的所有FMS Core進程
  • 每個返回的進程ID
  • 它使用PsList將列出詳細信息,其中包括過程的年齡
  • 它使用正則表達式匹配找到「時間,它已經運行」
  • 如果時間超過5小時(可配置參數),它使用pskill殺處理。

因此,我們將此設置爲每小時計劃任務,併爲我們處理垃圾收集。

http://zeroasterisk.com/blog/wp-content/uploads/2010/07/fmscore-killer-source.au3_.txt

1
setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION 
FOR /F "tokens=2,10* skip=8 delims=: " %%A IN ('pslist') DO (
    if %%B GEQ 4 echo should kill pid %%A, elapsedhrs=%%B 
) 

注意

  • 跳過= 8時過濾掉則PsList版權和版本info,可能是版本特定的
  • 不能在exe文件中使用空格在文件名中!
  • 這也將列表系統進程像短信時,Winlogon,SVCHOST等你不應該殺死這些(所以,請不要運行本作的系統,也可能有問題,如果運行的升高管理員)

如果過濾通過CPU時間是可以接受的,可以使用一個簡單的內置命令:tasklist /FI "CPUTIME ge 04:00:00"

用Windows Scripting Host或Powershell解決這個問題可能會更好(用WMI列出進程,這樣你會得到實際的對象並且不會沒必要處理字符串)

+0

真棒 - 感謝您的信息...沒有解決,我試圖解決的問題,但確實給了我很好的信息。謝謝! – zeroasterisk 2010-07-30 21:01:40