2012-11-01 66 views
2

我有這種情況,一臺裝有Windows XP的舊電腦作爲系統的服務器工作,並且有可能在出現問題時向我發送警報。但是,我們使用的這個服務器程序真的很麻煩,並且可能在某個特定時刻停止關注警報。然後這些警報堆積起來,並在程序最終重新啓動時立即全部發送。這使得這些警報非常無用,因爲當你重新啓動程序時,你已經知道系統有問題。從批處理文件中殺死Windows 16位進程

我想要的解決方案是Windows Task Scheduler每晚都可以殺死,然後在簡單批處理文件的幫助下重新啓動程序。雖然我似乎無法找到殺死進程的方法,因爲程序的進程是作爲Windows進程csrss.exe的子進程,子進程運行的。

如果我打開任務管理器,我可以看到該進程並殺死它,但命令tasklist僅顯示父進程csrss.exe,並且我需要PID用taskkill殺死它。是的,tasklist確實有殺死子進程的額外參數/t,但我需要一種方法來只殺死子進程,並且使Windows csrss.exe顯然不可或缺。

所以我的問題是:有誰知道如何殺死一個批處理文件的幫助下的子進程?

這當然可以通過編寫一個特定的程序來完成,然後讓批處理文件使用該程序,但我希望能夠快速修復。

到目前爲止,我有:

TASKLIST /FI "IMAGENAME eq program.exe" 2>NUL | FIND /I /N "program.exe">NUL 
IF NOT %ERRORLEVEL%==0 GOTO :restart 
TASKKILL /FI "IMAGENAME eq program.exe" /F /T 

:restart 
START /D "C:\path\" program.exe 

編輯:

我剛剛意識到一個進程的圖像名稱沒有在任務管理器縮進,因爲它是另一個進程的子進程,但由於這是一個16位的過程(非常直觀)。所以,這是一個16位的進程,現在的問題是如何找到一個PID,或者以其他方式殺死一個16位進程。正如我所提到的,Tasklist沒有顯示它,也沒有顯示pslist

+0

您需要回答的問題:「爲什麼沒有任務列表顯示我的過程?」這是一個16位程序嗎?你是否嘗試過使用pslist而不是tasklist? –

+0

是的,這是一個16位的進程 - 爲什麼tasklist沒有顯示任何內容?有沒有辦法顯示16位進程?我試圖安裝pstools和pslist,但它也找不到該過程。 – Muuse

+1

我不知道是否有預先製作的東西,但[這些](http://support.microsoft.com/kb/182559/en)應該是用於管理在NT-family下運行的16位任務的相關API Windows版本。 –

回答

0

我想我已經設法解決了我的問題,並且我將此處留給任何可能遇到類似問題的人。

我試圖殺掉進程NTVDM.EXE相反,因爲它是「可達」的tasklisttaskkill,因爲谷歌搜索顯示,其Windows的虛擬機,可以讓16位程序在32位運行位系統。我第一次試圖殺死它,但沒有強制它,但只殺死了ntvdm.exe,而不是16位進程本身。強制它似乎沒問題,但我不會推薦這個解決方案(出於顯而易見的原因)在任何有多個基本的16位進程運行的地方。

我終於結束了使用的命令是:

TASKKILL /FI "IMAGENAME eq ntvdm.exe" /F /T