我怎么能得到一个过程到核心映射在C
How can I get a process to core mapping in C?
我可以调用什么库函数来获得进程到内核的映射,或者给定进程id告诉我它在哪个内核上运行,它上次运行或计划运行。像这样:
core 1: 14232,42323
core 2: 42213,63434,434
core 3: 34232,34314
core 4: 42325,6353,1434,4342
core 5: 43432,64535,14345,34233
core 6: 23242,53422,4231,34242
core 7: 78789
core 8: 23423,23124,5663
I sched_getcpu
返回主叫进程的核心号。如果有一个函数给出一个进程id,会返回的核心号码,这将是很好的,但我还没有找到一个。sched_getaffinity
也没有用;它只是告诉你给定一个进程它可以运行在哪个核上这不是我感兴趣的。
我不知道您可以获得关于任何特定进程运行的CPU的信息,但是如果您查看/proc
,您会发现每个运行的进程都有一个条目。在/proc/<pid>/cpuset
下面,您将找到关于可用于运行该进程的cpu集的信息。
你的问题没有确切的答案。调度器可以随时将进程从一个处理器核心迁移到另一个处理器核心(实际上它正在这样做)。所以当你得到答案的时候,它可能已经错了。一个进程通常不会绑定到任何特定的核心(除非它的CPU亲和度已经设置,例如使用sched_setaffinity(2),这是不寻常的;参见cpuset(7)。
你为什么问这个?为什么这很重要?
你可能想深入/proc,参见proc(5) man page。
换句话说,如果内核确实给出了该信息,它是通过/proc/
,但我猜该信息不可用,因为它没有任何意义。
NB。内核会在不同的处理器内核上调度进程,比您能做的要好得多,所以即使使用仓库,您也不应该关心内核是否运行一些pid。
是的,虚拟文件/proc/[pid]/stat
似乎有这个信息:man 5 proc
:
/proc/[pid]/stat
Status information about the process. This is used by ps(1). It is
defined in /usr/src/linux/fs/proc/array.c.
(...fields description...)
processor %d (since Linux 2.2.8)
CPU number last executed on.
on my dual core:
cat /proc/*/stat | awk '{printf "%-32s %dn", $2 ":", $(NF-5)}'
(su): 0
(bash): 0
(tail): 1
(hd-audio0): 1
(chromium-browse): 0
(bash): 1
(upstart-socket-): 1
(rpcbind): 1
. .虽然我不能说它是否相关和/或准确…
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 是否删除在对象构造过程中创建的对象
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- MPI突然停止了对多个核心的操作
- 在多个核心中处理一个HTTP请求
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 如何在鼠标挂钩过程中检测拖动
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- clang 插件:在编译过程中修改 AST
- 运算符继承和 cpp 核心准则 c.128 的问题
- 浮点异常(核心转储)#694457
- 如何使变量从 x 到 y,然后从 y 返回到 x 并始终重复该过程
- 在C++中调用 MS SQL 存储过程
- Linux:有没有办法找出生成核心文件的过程
- 我怎么能得到一个过程到核心映射在C