簡體   English   中英

如何獲取 IIS AppPool 工作進程 ID

[英]How to get IIS AppPool Worker Process ID

我有一個 PowerShell 腳本,當我們的監控服務檢測到網站已關閉時,該腳本會自動運行。 它應該停止 AppPool(使用Stop-WebAppPool -name $AppPool; ),等到它真正停止然后重新啟動它。

有時,進程實際上並沒有停止,表現為錯誤

Cannot Start Application Pool:  
The service cannot accept control messages at this time.
(Exception from HRESULT: 0x80070425)"

當您嘗試再次啟動它時。

如果停止所需的時間超過一定的秒數(我會在多次停止計時后選擇該時間量以查看通常需要多長時間),我只想終止該進程。

我知道我可以通過執行dir IIS:\AppPools\MyAppPool\WorkerProcesses\來獲取 AppPool 中工作人員使用的進程列表,

Process ID  State      Handles  Start Time
----------  -----      -------  ----------
7124        Running

但我不知道如何實際捕獲進程ID,以便我可以殺死它。

如果進程 ID 確實是要殺死的進程的 ID,您可以:

$id = dir IIS:\AppPools\MyAppPool\WorkerProcesses\ | Select-Object -expand processId
Stop-Process -id $id

或者

dir IIS:\AppPools\MyAppPool\WorkerProcesses\ | % { Stop-Process -id $_.processId }

在服務器上的命令提示符中,我只需對正在運行的 AppPool PID 列表執行以下操作,以便可以使用 taskkill 或 Task Mgr 殺死它們:

cd c:\windows\system32\inetsrv
appcmd list wp

taskkill /f /pid *PIDhere*

(添加羅馬評論的答案,因為 stej 的解決方案可能存在緩存問題)

在 web 服務器上以管理員身份打開 Powershell,然后運行:

gwmi -NS 'root\WebAdministration' -class 'WorkerProcess' | select AppPoolName,ProcessId 

您應該會看到如下內容:

AppPoolName ProcessId
----------- ---------
AppPool_1        8020
AppPool_2        8568

然后,您可以使用任務管理器將其殺死,或者在 Powershell 中使用:

Stop-Process -Id xxxx

如果您得到Get-WmiObject:無法從命名空間根/WebAdministration 獲取對象。 命名空間無效,那么您需要使用以下命令啟用IIS 管理腳本和工具功能:

ipmo ServerManager
Add-WindowsFeature Web-Scripting-Tools

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM