Windows 通过进程 ID 查找进程名称的 3 种方法
2024-09-20 07:54:53
在Windows系统中,我们经常会遇到需要根据进程ID(PID)查找对应的进程名称的情况。这在很多场景下都非常实用,例如在分析系统性能瓶颈、排查系统故障、编写自动化脚本等方面。虽然我们可以通过任务管理器查看进程的PID和名称,但在一些自动化脚本或程序中,我们需要以编程的方式获取进程名称。
本文将介绍几种在Windows系统中,通过进程ID查找进程名称的常用方法,并提供相应的代码示例。
方法一:使用tasklist命令
tasklist
是Windows系统自带的一个命令行工具,它可以列出当前正在运行的所有进程,并显示每个进程的PID、进程名称、内存使用情况等信息。我们可以利用 tasklist
命令的筛选功能,只显示指定PID的进程信息,从而获取进程名称。
以下是一个使用 tasklist
命令查找进程名称的批处理脚本示例:
@echo off
setlocal
set PID=%1
for /f "tokens=1,2 delims= " %%a in ('tasklist /fi "PID eq %PID%" /nh') do (
set ProcessName=%%b
)
echo 进程ID:%PID%
echo 进程名称:%ProcessName%
endlocal
脚本解析:
@echo off
:关闭命令回显,避免在执行脚本时显示命令本身。setlocal
:创建一个局部环境,脚本中定义的变量只在该环境中有效,不会影响全局环境。set PID=%1
:将脚本的第一个参数(即进程ID)赋值给变量PID
。for /f ...
循环:tokens=1,2 delims=
:指定提取tasklist
命令输出结果的第一列和第二列,并使用空格作为分隔符。tasklist /fi "PID eq %PID%" /nh
:执行tasklist
命令,使用/fi
参数筛选PID等于指定值的进程,使用/nh
参数不显示表头。%%a
和%%b
分别代表提取的第一列和第二列,也就是进程名称和进程ID。
set ProcessName=%%b
:将提取到的进程名称赋值给变量ProcessName
。echo 进程ID:%PID%
和echo 进程名称:%ProcessName%
:输出进程ID和进程名称。endlocal
:结束局部环境。
使用方法:
将以上代码保存为一个 .bat
文件,例如 get_process_name.bat
,然后在命令行中执行以下命令:
get_process_name.bat 1234
其中,1234
是要查找的进程ID。脚本会输出该进程ID对应的进程名称。
方法二:使用WMIC命令
WMIC
(Windows Management Instrumentation Command-line)是Windows系统中一个强大的命令行工具,它可以用来管理和查询系统信息,包括进程信息。我们可以使用 WMIC
命令查询指定PID的进程,并获取其名称。
以下是一个使用 WMIC
命令查找进程名称的批处理脚本示例:
@echo off
setlocal
set PID=%1
for /f "tokens=2 delims==" %%a in ('wmic process where "ProcessId='%PID%'" get name /value') do (
set ProcessName=%%a
)
echo 进程ID:%PID%
echo 进程名称:%ProcessName%
endlocal
脚本解析:
- 代码的前三行与方法一相同。
for /f ...
循环:tokens=2 delims==
:指定提取wmic
命令输出结果的第二列,并使用等号作为分隔符。wmic process where "ProcessId='%PID%'" get name /value
:执行wmic
命令,查询PID等于指定值的进程,并获取其名称属性的值。
set ProcessName=%%a
:将提取到的进程名称赋值给变量ProcessName
。- 代码的最后两行与方法一相同。
使用方法:
将以上代码保存为一个 .bat
文件,例如 get_process_name_wmic.bat
,然后在命令行中执行以下命令:
get_process_name_wmic.bat 1234
其中,1234
是要查找的进程ID。脚本会输出该进程ID对应的进程名称。
方法三:使用PowerShell
PowerShell 是Windows系统中一个功能强大的脚本语言和命令行工具,它可以用来管理和自动化Windows系统。我们可以使用PowerShell的 Get-Process
命令来获取进程信息,并根据PID查找进程名称。
以下是一个使用PowerShell查找进程名称的脚本示例:
$PID = $args[0]
$process = Get-Process -Id $PID
Write-Host "进程ID:$PID"
Write-Host "进程名称:$($process.ProcessName)"
脚本解析:
$PID = $args[0]
:将脚本的第一个参数(即进程ID)赋值给变量$PID
。$process = Get-Process -Id $PID
:使用Get-Process
命令获取指定PID的进程对象,并将其赋值给变量$process
。Write-Host "进程ID:$PID"
和Write-Host "进程名称:$($process.ProcessName)"
:输出进程ID和进程名称。
使用方法:
将以上代码保存为一个 .ps1
文件,例如 get_process_name_ps.ps1
,然后在PowerShell中执行以下命令:
.\get_process_name_ps.ps1 1234
其中,1234
是要查找的进程ID。脚本会输出该进程ID对应的进程名称。
总结
本文介绍了三种在Windows系统中,通过进程ID查找进程名称的常用方法,分别使用了 tasklist
命令、WMIC
命令和PowerShell。三种方法各有优缺点,你可以根据自己的需求和使用场景选择合适的方法。
常见问题解答:
1. 如果进程ID不存在,脚本会输出什么?
如果进程ID不存在,tasklist
命令和 WMIC
命令的输出结果为空,PowerShell脚本会抛出一个异常。
2. 如何将脚本的输出结果保存到文件中?
可以使用重定向符号 >
将脚本的输出结果保存到文件中,例如:
get_process_name.bat 1234 > result.txt
3. 如何批量查找多个进程的名称?
可以将多个进程ID作为参数传递给脚本,例如:
get_process_name.bat 1234 5678 9012
4. 如何判断一个进程是否存在?
可以使用 tasklist
命令或 WMIC
命令查询指定PID的进程,如果查询结果为空,则表示进程不存在。
5. 如何获取进程的其他信息,例如内存使用情况?
可以使用 tasklist
命令、WMIC
命令或PowerShell的 Get-Process
命令获取进程的其他信息,例如内存使用情况、CPU使用率等。
希望本文能够帮助你解决问题,如果你有任何疑问或者建议,欢迎在评论区留言。