通过进程 ID 查找进程名称 [关闭]
Posted
技术标签:
【中文标题】通过进程 ID 查找进程名称 [关闭]【英文标题】:Find Process Name by its Process ID [closed] 【发布时间】:2015-01-28 10:58:06 【问题描述】:假设我知道进程 ID。我想使用 Windows 批处理脚本通过其 ID 查找进程名称。我该怎么做?
【问题讨论】:
【参考方案1】:基本的,让tasklist过滤它的输出,只显示指定的进程id信息
tasklist /fi "pid eq 4444"
只获取进程名,必须拆分行
for /f "delims=," %%a in ('
tasklist /fi "pid eq 4444" /nh /fo:csv
') do echo %%~a
在这种情况下,以 csv 格式 (/fo:csv
) 检索不带标题 (/nh
) 的进程列表。逗号用作标记分隔符,行中的第一个标记是图像名称
注意:在某些 windows 版本中(其中一个,我的例子是西班牙 windows xp 版本),任务列表中的 pid 过滤器不起作用。在这种情况下,必须在命令之外完成对进程列表的过滤
for /f "delims=," %%a in ('
tasklist /fo:csv /nh ^| findstr /b /r /c:"[^,]*,\"4444\","
') do echo %%~a
这将生成任务列表并过滤它,在 csv 输出的第二列中搜索进程 ID。
已编辑:或者,您可以假设将操作系统翻译成西班牙语的团队做了什么。我不知道在其他地区会发生什么。
tasklist /fi "idp eq 4444"
【讨论】:
有没有办法单独获取所有进程和 PID?我们可以在 linux 中做到这一点,但不确定 dos 命令。请帮忙。 对我来说显示“任务列表:找不到命令”我该怎么办?【参考方案2】:仅使用“本机”Windows 实用程序,尝试以下操作,其中“516”是您想要图像名称的进程 ID:
for /f "delims=," %a in ( 'tasklist /fi "PID eq 516" /nh /fo:csv' ) do ( echo %~a )
for /f %a in ( 'tasklist /fi "PID eq 516" ^| findstr "516"' ) do ( echo %a )
或者您可以使用 wmic(Windows Management Instrumentation 命令行工具)并获取可执行文件的完整路径:
wmic process where processId=516 get name
wmic process where processId=516 get ExecutablePath
或者您可以下载 Microsoft PsTools,或者专门下载 pslist 实用程序,然后使用 PsList:
for /f %a in ( 'pslist 516 ^| findstr "516"' ) do ( echo %a )
【讨论】:
如果进程ID小于1000,find
命令可以在tasklist
的情况下检索到内存列中匹配数据的错误行,或者(小于或大于1000)在wmic
或pslist
数字列中的任何数字列中。
添加尾部空格并不能解决问题(例如:内存列中的1.500
)。在 tasklist 中您可以过滤输出(/fi
),在 wmic 中您可以过滤输出(where
子句),在 pslist 中您可以过滤输出(在命令行中给出 pid
)。虽然grep
是一个很棒的工具,但这里没有必要使用它
好的,好的。让我为它工作...... ;-)【参考方案3】:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /a pid=1600
FOR /f "skip=3delims=" %%a IN ('tasklist') DO (
SET "found=%%a"
SET /a foundpid=!found:~26,8!
IF %pid%==!foundpid! echo found %pid%=!found:~0,24%!
)
GOTO :EOF
...根据您的情况设置 PID。
【讨论】:
以上是关于通过进程 ID 查找进程名称 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章