如何在Linux中获取进程的CPU信息?

时间:2010-08-03 20:15:51

标签: linux cpu-usage

在我的服务器中,存在多个CPU(0-7)。我需要运行并行代码,每个进程都有一个CPU,所以我怎么知道每个进程的CPU信息?

例如,如果存在两个进程(#0和#1),则进程#0使用CPU 5,进程#1使用CPU 7。

我怎么知道用C或Fortran编程?

5 个答案:

答案 0 :(得分:2)

使用sched_getcpu()来电。

请记住,可以自由调度进程/线程以在任何可用的cpu / core上运行,因此您的一个进程可以在核心1上运行一秒,在核心2上运行下一个毫秒。您可以使用sched_setaffinity()

限制允许进程运行的处理器

答案 1 :(得分:2)

我不知道Linux上有任何系统调用,它会为您提供有关正在运行的线程的CPU的一般信息。 @nos是正确的,sched_getcpu()会告诉你一个线程正在运行哪个CPU,但仅用于调用上下文。

您可以通过查询/proc文件系统来执行此操作。但是,如果您发现自己围绕此功能构建应用程序,则可能需要重新检查您的设计。

文件/proc/<pid>/stats包含一个字段,为您提供进程运行的最后一个CPU。您只需要解析输出。 (使用man proc查看字段列表。)

答案 2 :(得分:1)

通常,操作系统的任务是从应用程序中抽象出这样的东西。 通常情况下,我看到我的应用程序(就像在巨大的文件上执行grep一样简单)每隔一段时间就会更改一次CPU内核。

现在,如果要在特定核心上强制应用程序,可以手动设置CPU亲和力。

过去我写过一些非常奇怪的软件,我从来没有想过要知道和/或控制它。

为什么想要知道?

答案 3 :(得分:0)

通常,您必须更改CPU亲和性,因为进程可以在处理器之间迁移:CPU Affinity(Linux Journal,2003)。

答案 4 :(得分:0)

更一般地说,你为什么想知道? Linux内核非常擅长调度进程/线程以充分利用可用内核。