2015-06-19 15 views
9

Esiste un modo per ottenere il PID di un servizio Windows con un comando in uno script batch semplicemente conoscendo il nome del servizio?Ottieni il PID di un servizio Windows con il nome del servizio

+1

Questo non funziona per voi? http://stackoverflow.com/questions/17472903/how-to-get-the-dynamic-pid-of-a-windows-service-and-then-kill-it –

+1

No questo non è quello che voglio.Che codice troverà il PID dal file .exe non dal nome del servizio. – ilce

risposta

13

provare il seguente codice:

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

Attenzione che molti servizi potrebbero condividere lo stesso PID. Prova 'for/f" token = 3 "% A in ('sc queryex w32time^| find" PID "') wmic service dove" ProcessID =% A "ottiene didascalia, nome, processid/valore' da un prompt cmd. – rojo

+4

L'OP non ha richiesto il codice per terminare il servizio, Sicuramente in questo caso si dovrebbe usare sc.exe per fermarlo invece di uccidere direttamente il processo, che potrebbe ospitare più servizi. Si potrebbe anche usare qualcosa come 'tasklist/svc/fi" servizi eq% serviceName% "/ fo list' per ottenere il PID più un elenco di tutti i servizi ospitati dal processo. – eryksun

+0

Sembra che 'taskkill/F/PID! Pid!' Dovrebbe essere '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 
Problemi correlati