【问题标题】:Get the PID of a Windows service by the name of the service通过服务名称获取 Windows 服务的 PID
【发布时间】:2015-06-19 15:15:33
【问题描述】:

有没有办法只知道服务的名称就可以通过批处理脚本中的命令获取 Windows 服务的 PID?

【问题讨论】:

标签: windows batch-file service cmd pid


【解决方案1】:

试试下面的代码:

FOR /F "tokens=3" %%A IN ('sc queryex %serviceName% ^| findstr PID') DO (SET pid=%%A)
 如果“!pid!” NEQ "0" (
  taskkill /F /PID !pid!
 )

【讨论】:

  • 请注意,许多服务可能共享相同的 PID。在 cmd 提示符下尝试 for /f "tokens=3" %A in ('sc queryex w32time ^| find "PID"') do wmic service where "ProcessID=%A" get caption,name,processid /value
  • OP 没有要求终止服务的代码,当然在这种情况下,您只需使用 sc.exe 来停止它,而不是直接终止可以托管多个服务的进程。您还可以使用 tasklist /svc /fi "services eq %serviceName%" /fo list 之类的东西来获取 PID 以及进程托管的所有服务的列表。
  • 看来taskkill /F /PID !pid!应该是taskkill /F /PID %pid%
  • @CodenameK - 我同意。我编辑了答案,但似乎我的编辑被拒绝了。
【解决方案2】:

只做taskkill /f /fi "SERVICES eq <service_short_name>"就容易多了

【讨论】:

    【解决方案3】:
    @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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-28
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多