2015-06-19 159 views
9

只需知道服務的名稱,是否可以通過命令在批處理腳本中獲取Windows服務的PID?通過服務的名稱獲取Windows服務的PID

+1

這並不爲你工作? http://stackoverflow.com/questions/17472903/how-to-get-the-dynamic-pid-of-a-windows-service-and-then-kill-it –

+1

不,這不是我想要的。那些代碼將通過.exe文件找到PID而不是服務的名稱。 – ilce

回答

13

試試下面的代碼:

FOR /F "tokens=3" %%A IN ('sc queryex %serviceName% ^| findstr PID') DO (SET pid=%%A) 
IF "!pid!" NEQ "0" (
    taskkill /F /PID !pid! 
)
+1

請注意,許多服務可能共享相同的PID。 ('sc queryex w32time^| find「PID」')執行'for/f「標記= 3」%A在wmic service中,「ProcessID =%A」從cmd提示符獲取標題,名稱,processid/value'。 – rojo

+4

OP沒有要求代碼來終止服務,當然在這種情況下,您只需使用sc.exe來停止它,而不是直接終止可以託管多個服務的進程。你也可以使用'tasklist/svc/fi'services eq%serviceName%「/ fo list'這樣的東西來獲得PID以及進程託管的所有服務的列表。 – eryksun

+0

看來'taskkill/F/PID!pid!'應該是'taskkill/F/PID%pid%' –

2
@echo off 

for /f "tokens= delims=" %%# in (' 
    wmic service where "name='Service'" get ProcessId /format:value 
') do (
    for /f "tokens=* delims=" %%$ in ("%%#") do set "%%$" 
) 

taskkill /pid %ProcessId% /f