Windows 获取进程ID

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

查找进程 ID

  • 项目
  • 12/13/2022

本文内容

Windows中运行的每个进程都分配了一个名为进程 ID (PID) 的唯一十进制数。 此数字以多种方式使用,例如,在将调试器附加到它时指定进程。

本主题介绍如何使用任务管理器、任务列表Windows命令、TList 实用工具、PowerShell Get-Process 命令或调试器来确定给定应用的 PID。

任务管理器

可以通过多种方式打开任务管理器,但最简单的方法是选择 Ctrl+Alt+Delete,然后选择 任务管理器

在Windows中,首先单击“更多详细信息”以展开显示的信息。 在“ 进程 ”选项卡中,选择“ 详细信息 ”以查看 PID 列中列出的进程 ID。

Windows 获取进程ID

单击任意列名进行排序。 可以右键单击进程名称以查看进程的更多选项。

某些内核错误可能会导致任务管理器的图形界面出现延迟。

tasklist 命令

使用命令提示符中的内置Windows任务列表命令显示所有进程、其 PID 和其他各种详细信息。

C:\>tasklist

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0          8 K
System                           4 Services                   0      7,428 K
Secure System                  104 Services                   0     40,344 K
Registry                       164 Services                   0    146,596 K
smss.exe                       592 Services                   0      1,176 K
csrss.exe                      896 Services                   0      6,224 K
wininit.exe                    980 Services                   0      6,572 K
...

用于 tasklist /? 显示命令行帮助。

TList 实用工具

任务列表查看器 (TList) 或tlist.exe是一个命令行实用工具,显示当前在本地计算机上运行的任务列表或用户模式进程的列表。 TList 包含在用于Windows的调试工具中。 有关如何下载和安装调试工具的信息,请参阅下载用于Windows的调试工具。

如果在 64 位电脑上的默认目录中安装了Windows驱动程序工具包,调试工具位于以下位置:

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\

从命令提示符运行 TList 时,它将在内存中显示具有唯一 PID 编号的所有用户模式进程的列表。 对于每个进程,它显示 PID、进程名称,以及进程具有窗口(该窗口的标题)。

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64>tlist -t
System Process (0)
System (4)
  smss.exe (592)
  Memory Compression (3376)
Secure System (104)
Registry (164)
csrss.exe (896)
wininit.exe (980)
  services.exe (660)
    svchost.exe (1232)
      WmiPrvSE.exe (6008)
      dllhost.exe (1748)
      WmiPrvSE.exe (1860)
...

有关详细信息,请参阅 TList。

.tlist 调试器命令

如果系统中已有运行用户模式调试器, 则 .tlist (List Process ID) 命令将显示系统上所有 PID 的列表。

PowerShell Get-Process 命令

若要使用自动化脚本,请使用 Get-Process PowerShell 命令。 指定特定的进程名称,以查看该过程的进程 ID。

C:\> Get-Process explorer

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
   2520     404   108948     179284   1,702.95   7656   1 explorer

有关详细信息,请参阅 Get-Process。

其他资源

若要了解有关 Windows 内部(包括内存使用、上下文、线程和进程)的更多信息,请查看其他资源,如 Windows 内部结构(作者:Mark Russinovich、David Solomon 和 Alex Ionescu)


其他资源

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

下载 Microsoft Edge 有关 Internet Explorer 和 Microsoft Edge 的详细信息

使用英语阅读

使用英语阅读

获取当前进程的会话 ID

  • 项目
  • 09/22/2022

本文内容

[此示例代码指定的内存地址可能会在Windows的未来版本中更改。 为了确保应用程序将来能够继续正常运行,应用程序必须调用 GetCurrentProcessId ,然后调用 ProcessIdToSessionId ,而不是以下示例代码。

以下示例 x86 程序集代码获取与当前进程关联的终端服务会话 ID。

mov     eax,fs:[00000018]
mov     eax,[eax+0x30]
mov     eax,[eax+0x1d4]


其他资源

其他资源

本文内容

Windows 获取进程ID

#include<windows.h>
#include<iostream>
#include<tchar.h>
using namespace std;
int main(){
    
    DWORD processId = GetCurrentProcessId();//当前进程id
    DWORD sessionId;
    if(ProcessIdToSessionId(processId,&sessionId)){
        _tprintf(TEXT("Process '%u' runs in Terminal Services session '%u'"),processId,sessionId);//该函数在tchar.h中
    }
    else{
        _tprintf(TEXT("Unable to get Terminal Services session ID for process '%u'"),processId);
    }
    
}

d:\programming\C++>cl getSessionId.cpp
用于 x86 的 Microsoft (R) C/C++ 优化编译器 18.00.21005.1 版版权所有(C) Microsoft
 Corporation。  保留所有权利。

getSessionId.cpp
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\sal_supp.h(57) : war
ning C4005: “__useHeader”: 宏重定义
        F:\360Apps\vs2013\VC\include\sal.h(2886) : 参见“__useHeader”的前一个定
义
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(7
7) : warning C4005: “__on_failure”: 宏重定义
        F:\360Apps\vs2013\VC\include\sal.h(2896) : 参见“__on_failure”的前一个
定义
F:\360Apps\vs2013\VC\include\xlocale(337) : warning C4530: 使用了 C++ 异常处理程
序,但未启用展开语义。请指定 /EHsc
Microsoft (R) Incremental Linker Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:getSessionId.exe
getSessionId.obj

d:\programming\C++>getSessionId
Process '5056' runs in Terminal Services session '1'
d:\programming\C++>getSessionId
Process '6572' runs in Terminal Services session '1'
d:\programming\C++>getSessionId
Process '8324' runs in Terminal Services session '1'
d:\programming\C++>getSessionId
Process '8516' runs in Terminal Services session '1'
d:\programming\C++>getSessionId
Process '7748' runs in Terminal Services session '1'