确定正在运行进程的CPU


19

使用Sysinternals的Process Explorer,是否有一列可用于指示进程正在运行的CPU?如果没有专栏,还有其他方法吗?



3
@DavidPostill - 最好的答案只是指向Process Explorer的网页。我的问题是:给定流程资源管理器,如何确定流程启动的核心?
rory.ap 2015年

Answers:


47

2005年要求:

我对Process Explorer中集成的功能印象非常深刻,但希望看到一个选项,可以在主窗口中将每个进程的CPU关联显示为列切换。

没有反应。

2007年要求:

感谢精湛的实用程序。我的请求是添加一个列选项来处理资源管理器以显示CPU关联。而已。

没有反应。

2013年类似的讨论:

如果有一个名为Core Usage的新流程性能视图列可以显示运行该进程的核心的使用总和,那将是非常好的。

基本概要:无法完成。

线程是发送到核心进行处理的,而不是进程。大多数现代流程都有多个线程。

如果手动设置进程的亲缘关系,则进程的所有线程都应该坚持使用单个处理器。由于您手动设置它,您应该知道它在哪个CPU上。;)

但是如果你没有指定,那么线程将由操作系统和底层处理硬件控制,并且会以不可观察的速度在处理器之间跳转,并且在显示到的时间很可能不准确您。

或许可以查看这些SU问题:

另外,来自StackOverflow:

现在,如果编写程序,可以使用GetCurrentProcessorNumber,它报告调用函数的线程使用的当前处理器。

使用它将允许您对线程的处理器使用情况进行估计,因为您永远无法确定线程在下一个周期的位置(再次,除非您有意设置关联性)。

更多信息:


3
很好的答案...... :)
DavidPostill

@DavidPostill - 同意。
rory.ap 2015年

很好的答案,因为它回答了具体的问题,进入历史和为什么,并有助于理解这些概念。
史密瑟斯2015年

1
在Linux和Windows上,可以在每个线程的基础上设置关联。但是,这很少有用,因此很少有用,因此在通用监视程序中显示每线程关联,如果设置它或多或少没用 - 绝大多数只会让内核按需安排。
鲍勃

操作系统甚至可以在调用GetCurrentProcessorNumber之后(但在它开始执行之前)将您的线程切换到另一个处理器,并在它返回之后再次切换,因此结果既不是调用时的处理器,也不是当时的处理器电话回来了!
gnasher729 2015年

8

这可以通过捕获xperf跟踪并使用Windows性能分析器(WPA.exe)从Windows性能工具包打开它来完成,在这里您可以添加列CPU以查看进程正在运行的CPU(核心):

在此输入图像描述


尼斯。它是否列出了每个CPU下的相同进程(如果它使用多个)?由于它使用捕获的xperf跟踪,这是否意味着它不是实时报告?
Ƭᴇcʜιᴇ0072015年

@Ƭᴇcʜιᴇ007ETW事件也可以在运行时使用。将它们写入ETL文件只是一种方式。是的,当它同时使用两个CPU时,它会列出两个CPU下的进程。
magicandre1981 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.