参考文章:Windows解除占用(解除文件占用、解除目录占用)查看文件进程(查看父进程、查看子进程、查看父子进程)占用文件占用、占用目录占用
文章目录
在 Windows 系统中,查看某个进程号(PID)的父进程(Parent Process ID, PPID)有以下几种方法:
方法 1:使用 PowerShell(可以查到父进程!)
1. 打开 PowerShell:
- 按
Win + X
,选择 Windows PowerShell 或 Windows Terminal (Admin)。
2. 运行命令:
Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE ProcessId = <PID>"
将 <PID>
替换为你要查询的进程号。例如:
Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE ProcessId = 1234"
3. 查看结果:
- 输出中会包含
ParentProcessId
字段,即父进程的 PID。
4. 上面输出信息有点多,只输出父进程可以用以下命令:
Get-WmiObject -Query "SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = <PID>"
如:
Get-WmiObject -Query "SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = 18276"
方法 2:使用 tasklist
和 findstr
(命令提示符)(查不到!)
1. 打开命令提示符:
- 按
Win + R
,输入cmd
,按回车。
2. 列出所有进程:
tasklist /v
/v
参数会显示详细信息,包括父进程的 PID。
3. 查找特定进程:
如果只想查看某个 PID 的详细信息,可以结合 findstr
过滤:
tasklist /v | findstr <PID>
方法 3:使用第三方工具(推荐)(可以查到父子进程!可以查到进程树,推荐!)
工具:Process Explorer(Sysinternals)
1. 下载并运行 Process Explorer:
- 从 Sysinternals 官网 下载并运行
ProcessExplorer.exe
。
2. 查看父进程:
- 在 Process Explorer 窗口中,找到目标进程(可以通过 PID 搜索)。
右上角搜索貌似只能通过名称,我是使用Find handle or DLL...
搜索的:
通过进程id搜索,然后点击搜索结果,能直接定位到进程树所在位置,父进程、子进程一目了然:
- 右键点击该进程,选择 Properties。
也可以点击属性查看详细信息:
- 在 Image 标签页下,查看 Parent Process ID。
方法 4:使用调试工具(高级用户)(略)
工具:TList(Windows 调试工具)
1. 安装调试工具:
- 安装 Windows SDK 或 Windows Driver Kit (WDK)。
- 默认路径:
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\
。
2. 运行 TList:
tlist -t
- 输出会显示进程树结构,包括父进程关系。
方法 5:使用 C++ 代码(开发人员)(略)
如果需要编程实现,可以使用 NtQueryInformationProcess
函数(参考知识库 [3]):
1. 代码示例:
#include <windows.h>
#include <iostream>
NTSTATUS NtQueryInformationProcess(HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength, PULONG ReturnLength);
int main() {
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId());
if (hProcess == NULL) {
std::cerr << "OpenProcess failed." << std::endl;
return 1;
}
PROCESS_BASIC_INFORMATION pbi;
ULONG returnLength;
NTSTATUS status = NtQueryInformationProcess(hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), &returnLength);
if (status == 0) {
std::cout << "Parent Process ID: " << pbi.ParentProcessId << std::endl;
} else {
std::cerr << "NtQueryInformationProcess failed." << std::endl;
}
CloseHandle(hProcess);
return 0;
}
2. 编译并运行:
- 需要链接 Windows SDK 并处理
NTSTATUS
返回值。
总结
- 推荐方法:使用 PowerShell 或 Process Explorer,操作简单且无需编程。
- 高级需求:使用
NtQueryInformationProcess
或调试工具(如 TList)进行深度分析。