批量 - 用户杀死进程

时间:2014-10-21 19:34:54

标签: batch-file

我有多个相同的进程正在运行,所有进程都由不同的用户名运行。是否有可能杀死所述进程的所有实例,但仅限1个用户名?

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

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

由于

2 个答案:

答案 0 :(得分:0)

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

  

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

     

pgrep -u root sshd

     

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

     

pkill会将指定的信号(默认为SIGTERM)发送到每个进程,而不是将它们列在stdout上。

另见here

答案 1 :(得分:0)

已编辑我无法在我的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

任务列表将以csv格式(/fi),无标题(/fo:csv)和详细模式({{1)检索基于可执行文件名(/nh)的进程列表})包含用户名。通过v命令过滤进程列表,仅检索所需用户的进程列表。生成的列表通过find命令处理,该命令将使用逗号作为分隔符,对于每个记录,将检索第二个字段(processID)。 for将使用检索到的pid终止进程。