获取正在执行突然退出的进程的CPU核心ID

获取正在执行突然退出的进程的CPU核心ID

在Linux中,在多核处理器中,ps,top类似的工具可以显示运行特定进程的CPU逻辑核心id。如果进程运行了一定时间,则很容易在进程列表中识别它。

相反,我有一个独立的程序,它打印“hello world”以及从 CPU 程序集(RDPID指令)检测到的逻辑核心的数量:

$ ./hello_world
hello world
1
$

它立即结束。我想将此数字与 或类似数字提供的数字进行ps比较top。那么,这种情况下如何获取相同的信息(CPU逻辑核心id)呢?当进程仍在执行时如何获取进程信息?

答案1

进程对核心 ID 的分配是暂时的(除非专门锁定),并且工具只能显示瞬时值。

线程可以随时重新调度到不同的核心上(通常在系统调用期间,或者当它超过其时间片时)。多线程进程可以同时在多个内核上运行。

可能有一些优化试图保持一定的稳定性(例如改进缓存),但不能依赖它们。

此外,echo它是一个内置的 shell——它在现有的 shell 进程内“运行”。

答案2

有 Linux 系统调用getcpu,它返回线程在进行系统调用时调度的 CPU。

阅读该手册页上的注释,并认识到 Paul 是多么正确:进行系统调用后,您很有可能在返回时被调度到不同的 CPU 内核上。因此,getcpu 仅在过去的某个时间点对线程的 CPU 核心做出有保证的语句。不是现在。

所以,长话短说:

当进程仍在执行时如何获取进程信息?

您可以使用 来获取正在运行线程的 CPU 核心getcpu,但它立即就过时了。核心分配不是静态的。

相关内容