确定正在运行进程的特定处理器

确定正在运行进程的特定处理器

我可以访问Linux集群的8核节点。登录到节点时,我可以使用以下命令查看处理器列表:

more /proc/cpuinfo

在我的 8 核节点中,处理器编号为 0 到 7。每个处理器都是 Intel Xeon CPU (E5430 @ 2.66GHz)。

现在假设我foo用一些参数调用该程序args

foo args

该程序foo需要很长时间才能执行(例如,数小时或数天)。打电话后foo是否可以确定特别的哪个处理器(即 0 到 7)foo正在运行?该top程序向我显示了进程 ID 和类似信息,但我没有看到处理器数字。有这样的信息吗?

答案1

ps如果您要求该psr列(或使用-F包含该列的标志),可以为您提供该信息。

前任:

$ ps -F $$
UID        PID  PPID  C    SZ   RSS PSR STIME TTY      STAT   TIME CMD
me        6415  6413  0  5210  2624   2 18:52 pts/0    SN     0:00 -su

或者:

$ ps -o pid,psr,comm -p $$
  PID PSR COMMAND
 6415   0 bash

当我运行第一个命令时,我的 shell 在 CPU 2 上运行,当我运行第二个命令时,我的 shell 在 CPU 0 上运行。请注意,进程可以非常非常快地更改 CPU,因此您实际看到的信息本质上已经过时了。

此超级用户问题的答案中有更多信息:

Linux:了解加载进程的处理器编号的命令?

答案2

使用topfrom procps(现在 Linux 发行版上通常是默认值),in top,按f,导航到P = Last User CPU (SMP)并按Space进行选择(您也可以使用 键移动字段,例如在COMMAND字段之前Right,然后上下移动)。q返回主屏幕(您将看到进程从一个处理器移动到另一个处理器,除非您明确将其配置为保留在一个处理器上)。您可以按 将W其保存为默认值。

?寻求帮助。

答案3

该命令taskset就是您要查找的内容:

任务集 - 检索或设置进程的 CPU 关联性

例子

$ taskset -p 12345
pid 12345's current affinity mask: f

掩码f表示所有处理器,0x00000001只是处理器 0。

$ taskset -c -p 24389 
pid 24389's current affinity list: 0-3

以列表格式显示 cpu。在此示例中,我的笔记本电脑上有 4 个核心。

请参阅手册页有更多详细信息

答案4

您也可以直接从 获取此信息/proc/[pid]/stat。这是第 39 个空格分隔字段(自 Linux 2.2.8 起)。

例如显示当前 shell 在哪个 CPU 处理器上运行(在本例中):

cat  /proc/$$/stat | cut -d' ' -f39

相关内容