【问题标题】:Batch - Kill Process by User批处理 - 按用户杀死进程
【发布时间】:2014-10-21 19:34:53
【问题描述】:

我有多个相同的进程在运行,它们都使用不同的用户名。是否可以杀死所述进程的所有实例,但只针对 1 个用户名?

例如,您可以看到: http://gyazo.com/85a627dfb9c775841047c4feaca3c8cf

假设我只想杀死用户拥有的进程:TCAGame_Svc50 这可能吗?

谢谢

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    如果您可以访问 Cygwin(我认为这是 Windows 问题),那么 pkill 将处理此问题。

    pgrep 查看当前正在运行的进程并列出 与标准输出匹配的选择标准的进程 ID。一切 标准必须匹配。例如,

    pgrep -u root sshd

    将仅列出名为 sshd 且由 root 拥有的进程。

    pkill 将向每个进程发送指定的信号(默认为 SIGTERM),而不是在标准输出中列出它们。

    另见here

    【讨论】:

      【解决方案2】:

      已编辑我无法在我的 XP 上运行以下代码(文档说它应该可以运行,可能是我的电脑),但在 windows 7 中它可以正常运行

      taskkill /im arma2oaserver.exe /fi "username eq TCAGame_Svc50" /f
      

      原始答案更详细,但在 XP 上对我有用

      @echo off
          setlocal enableextensions disabledelayedexpansion
      
          set "executable=arma2oaserver.exe"
          set "user=TCAGame_Svc50"
      
          for /f "tokens=2 delims=," %%a in ('
              tasklist /fi "imagename eq %executable%" /v /fo:csv /nh 2^>nul 
              ^| find /i "%user%"
          ') do taskkill /pid %%~a /f
      

      tasklist 将根据可执行名称 (/fi)、csv 格式 (/fo:csv)、不带标题 (/nh) 和详细模式 (v) 检索进程列表以包含用户名.进程列表通过find 命令过滤,仅检索所需用户的进程列表。结果列表通过for 命令处理,该命令将使用逗号作为分隔符,对于每条记录,将检索第二个字段(processID)。 taskkill 将使用检索到的 pid 终止进程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 2012-10-22
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多