programing

IIS AppPool 작업자 프로세스 ID를 가져오는 방법

i4 2023. 8. 29. 20:09
반응형

IIS AppPool 작업자 프로세스 ID를 가져오는 방법

모니터링 서비스에서 웹 사이트가 다운되었음을 감지할 때 자동으로 실행되는 PowerShell 스크립트가 있습니다.AppPool을 중지하도록 되어 있습니다(사용).Stop-WebAppPool -name $AppPool;), 실제로 중지될 때까지 기다렸다가 다시 시작합니다.

때때로 프로세스가 실제로 중지되지 않고 오류로 인해 표시됩니다.

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

다시 시작하려고 할 때.

중지하는 데 특정 초 이상이 걸린 경우(일반적으로 얼마나 걸리는지 확인하기 위해 몇 번의 중지 시간을 설정한 후 해당 시간을 선택합니다), 프로세스를 종료하고 싶습니다.

다음을 수행하여 AppPool에서 작업자가 사용하는 프로세스 목록을 가져올 수 있음을 알고 있습니다.dir IIS:\AppPools\MyAppPool\WorkerProcesses\,

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 목록에 대해 다음을 수행하여 태스크킬 또는 태스크 관리자로 해당 PID를 제거할 수 있습니다.

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

taskkill /f /pid *PIDhere*

(Stej의 솔루션에 캐시 문제가 있을 수 있으므로 Roman의 의견에 대한 답변 추가)

웹 서버에서 Powershell을 Administrator로 열고 다음을 실행합니다.

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

다음과 같은 내용이 표시됩니다.

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

그런 다음 작업 관리자를 사용하여 해당 작업을 종료하거나 Powershell에서 사용할 수 있습니다.

Stop-Process -Id xxxx

Get-WmiObject를 가져오는 경우 : 네임스페이스 루트/Web관리에서 개체를 가져올없습니다. 잘못된 네임스페이스를 사용한 경우 다음을 사용하여 IIS 관리 스크립트 및 도구 기능을 사용하도록 설정해야 합니다.

ipmo ServerManager
Add-WindowsFeature Web-Scripting-Tools

언급URL : https://stackoverflow.com/questions/7014536/how-to-get-iis-apppool-worker-process-id

반응형