在Linux中,假设线程的pid为[pid],我们可以从目录/proc/[pid]中获得许多有用的信息.例如,这些proc文件、/proc/[pid]/status、/proc/[pid]/stat和/proc/[pid]/schedstat都很有用.但是,如何获取线程运行的CPU核心号呢?如果一个线程处于睡眠状态,我怎么知道在再次调度后它将运行哪个内核?

顺便问一下,有没有办法转储每个CPU内核的运行和Hibernate 任务的进程(线程)列表?

推荐答案

The answer below is no longer accurate as of 2014

任务不存在于任何特定的核心.调度程序将不会提前知道它将在哪个内核上运行线程,因为这将取决于这些内核的future 使用情况.

要获取所需信息,请查看/proc/<;pid>/任务/<;tid>/地位如果线程正在运行,第三个字段将是"R".最后一个字段中的第六个将是线程当前正在运行的核心,或者是线程上次运行(或迁移到)的核心(如果当前未运行).

31466(公元前)S 31348 31466 31348 34819 31466 4202496 2557 0 0 0 5006 16 0 0 20 0 0 1 0 396934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264232056 21797807456 0 0 137912326 18446744071581662243 0 17 3 0 0 0 0 0 0 0 0

目前没有运行.上次在core 3上运行.

31466(公元前)R 31348 31466 31348 34819 31466 4202496 2557 0 0 0 3818 12 0 0 0 0 0 0 0 1 0 296934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264231824 4235516 0 0 0 0 0 0 0 0 0 0 0 0 0

目前在core 2上运行.

要了解其余字段的含义,请查看Linux内核源代码——特别是fs/proc/array.cDocumentation/filesystems/stat.txt中的do_task_stat函数.

请注意,当您获得这些信息时,这些信息可能都已过时.从您在proc中对文件进行open次调用到该调用返回之间的某个时刻,这是真的.

Linux相关问答推荐

并行函数的最后一个实例的状态

使用ms宏将PIC图像放置在页面的任意位置

AWK 命令根据另一列中相同的值获取列中的不同值

如何删除文件中不需要的字符(使用 shell 脚本)

什么命令用于在linux中创建或修改具有指定文件大小的多个文件

所有进程的Linux环境变量

x86_64 Linux 程序集中的逻辑与实现

你如何在 CentOS9 上使用 C++ fmt?

sig_atomic_t 实际上是如何工作的?

如何使用 sed debug调试正则表达式?

如何比较两个压缩包的内容

如何构建在 Android 上运行的本机(命令行)可执行文件?

Ubuntu 上 Java 应用程序中的丑陋字体

试运行 cron 条目

仅使用 proc 获取本地网络接口地址?

Linux命令将一个文件复制到多个文件

Bash:如何标记字符串变量?

如何将所有文件从一个目录移动(和覆盖)到另一个目录?

计算每个进程打开的文件

Linux(Ubuntu)终端-如何查看以前的页面不再可见