返回

Windows 通过进程 ID 查找进程名称的 3 种方法

windows

在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

脚本解析:

  1. @echo off:关闭命令回显,避免在执行脚本时显示命令本身。
  2. setlocal:创建一个局部环境,脚本中定义的变量只在该环境中有效,不会影响全局环境。
  3. set PID=%1:将脚本的第一个参数(即进程ID)赋值给变量 PID
  4. for /f ... 循环:
    • tokens=1,2 delims= :指定提取 tasklist 命令输出结果的第一列和第二列,并使用空格作为分隔符。
    • tasklist /fi "PID eq %PID%" /nh:执行 tasklist 命令,使用 /fi 参数筛选PID等于指定值的进程,使用 /nh 参数不显示表头。
    • %%a%%b 分别代表提取的第一列和第二列,也就是进程名称和进程ID。
  5. set ProcessName=%%b:将提取到的进程名称赋值给变量 ProcessName
  6. echo 进程ID:%PID%echo 进程名称:%ProcessName%:输出进程ID和进程名称。
  7. 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

脚本解析:

  1. 代码的前三行与方法一相同。
  2. for /f ... 循环:
    • tokens=2 delims==:指定提取 wmic 命令输出结果的第二列,并使用等号作为分隔符。
    • wmic process where "ProcessId='%PID%'" get name /value:执行 wmic 命令,查询PID等于指定值的进程,并获取其名称属性的值。
  3. set ProcessName=%%a:将提取到的进程名称赋值给变量 ProcessName
  4. 代码的最后两行与方法一相同。

使用方法:

将以上代码保存为一个 .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)"

脚本解析:

  1. $PID = $args[0]:将脚本的第一个参数(即进程ID)赋值给变量 $PID
  2. $process = Get-Process -Id $PID:使用 Get-Process 命令获取指定PID的进程对象,并将其赋值给变量 $process
  3. 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使用率等。

希望本文能够帮助你解决问题,如果你有任何疑问或者建议,欢迎在评论区留言。