我可以访问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,因此您实际看到的信息本质上已经过时了。
此超级用户问题的答案中有更多信息:
答案2
使用top
from 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