2015-06-19 32 views
9

Czy istnieje sposób uzyskania identyfikatora PID usługi systemu Windows za pomocą polecenia w skrypcie wsadowym po prostu znając nazwę usługi?Uzyskaj identyfikator PID usługi Windows pod nazwą usługi

+1

to nie działa dla Ciebie? http://stackoverflow.com/questions/17472903/how-to-get-the-dynamic-pid-of-a-windows-service-and-then-kill-it –

+1

Nie tego nie chcę. Kod odnajdzie PID w pliku .exe, nie pod nazwą usługi. – ilce

Odpowiedz

13

Wypróbuj poniższy kod:

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

Należy pamiętać, że wiele usług może korzystać z tego samego identyfikatora PID. Spróbuj "for/f" tokeny = 3 "% A w ('sc queryex w32time^| find" PID "') do usługi wmic, gdzie" ProcessID =% A "pobiera napis, nazwę, processid/value' z polecenia cmd. – rojo

+4

OP nie prosi o kod do zabicia usługi, Z pewnością w takim przypadku wystarczy użyć programu sc.exe, aby go zatrzymać, a nie bezpośrednio zabić proces, który może obsługiwać wiele usług. Możesz również użyć czegoś takiego jak 'tasklist/svc/fi 'services eq% serviceName%"/fo list', aby uzyskać PID plus listę wszystkich usług obsługiwanych przez proces. – eryksun

+0

Wygląda na to, że 'taskkill/F/PID! Pid!' Powinno być '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