判断Linux进程在哪个CPU核运行的方法

 

原文网址:http://www.embeddedlinux.org.cn/html/xinshourumen/201601/30-5013.html

问题:有一个Linux进程运行在多核处理器系统上,如何查看该进程运行在哪个CPU上?

方法一:

如果一个进程使用taskset命令明确的被固定(Pinned)到CPU的特定内核上,你可以使用taskset命令找出被固定的CPU内核:

taskset -c -p <pid>

例如,如果你对PID为5357的进程感兴趣,你可以使用如下命令来查看其运行在哪个CPU上:

taskset -c -p 5357

运行结果:pid 5357's current affinity list:5,输出显示这个进程被固定在5号CPU上。但是,如果你没有明确固定该进程到任何CPU上,你会得到类似下面的亲和力列表:

pid 5357's current affinity list:0-11,输出表明该进程可能会被安排在从0到11中的任何一个CPU上。在这种情况下,taskset不能识别该进程当前被分配给哪个CPU,你应该使用下面的方法。

方法二:

ps 命令可以告诉你每个进程/线程目前分配到的(在“PSR”列)CPU ID。

ps -o pid,psr,comm -p <pid>

运行结果:

PID PSR COMM

5357  10  prog

输出表示进程的 PID 为 5357(名为”prog”)目前在编号为 10的CPU 上运行着。如果该过程没有被固定,PSR 列会根据内核可能调度该进程到不同CPU而改变显示。

方法三:

top 命令也可以显示CPU被分配给哪个进程。首先,在top命令中使用"P"选项。然后,按“F”键,显示中会出现“Last used CPU”列。目前使用的CPU将出现在"P"(或“PSR”)列下。

步骤如下:

1、top -p 3393

2、按下 “F”键

3、使用上下键选择P = Last Used Cpu,并按下空格键,出现 “*”即可

4、按下“Q”键

相比于ps命令,使用top命令的好处是:你可以连续监视随着时间的改变,CPU是如何分配的。

方法四:

另一种来检查一个进程/线程当前使用的是哪个CPU的方法是使用 htop 命令。

从命令行启动htop。按“F2”键,进入“Columns”,在“Available Columns”下添加PROCESSOR,按“F10”保存,每个进程当前使用的CPU ID将出现在CPU列中。

请注意,所有以前使用的命令 taskset,ps 和 top 分配CPU 内核的 IDs 为 0,1,2,…,N-1。然而,htop 分配 CPU 内核 IDs 从 1开始(直到 N)。

[转帖]判断Linux进程在哪个CPU核运行的方法的更多相关文章

  1. Linux进程线程学习笔记:运行新程序

    Linux进程线程学习笔记:运行新程序                                         周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下 ...

  2. 有趣的taskset命令,使进程再指定CPU上运行

    前言 taskset命令,用于进程的CPU调优,可以把某进程,指定再某CPU内工作. 如还不明白,可以参考此文 http://www.361way.com/linux-context-switch/5 ...

  3. Win7下判断当前进程是否以管理员身份运行

    判断当前程序是否以管理员身份运行,代码如下: #include <iostream> #include <windows.h> using namespace std; // ...

  4. 查看进程中占cpu高的线程方法

    当在任务管理器中发现有进程占用cpu过高的时候通过下面的指令将进程快照导出到c盘 jstack -l 进程PID > c:/进程PID.stack  (此命令生成.stack文件在c盘中,用文本 ...

  5. Linux下查看所有CPU核心使用率的方法

    两种方法: 1.方法一: sar -P ALL 查看历史CPU使用率: sar -f /var/log/sa/sa01 2.方法二: mpstat -P ALL

  6. 判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)

    在Win7下(Vista以上的...)有时某些操作就是会让人郁闷 开启了UAC的话,得以管理员权限运行才不会出现Access is denied... 但是,程序又不是非得什么时候都用那破管理员权限的 ...

  7. linux进程、线程与cpu的亲和性(affinity)

    参考:http://www.cnblogs.com/wenqiang/p/6049978.html 最近的工作中对性能的要求比较高,下面简单做一下总结: 一.什么是cpu亲和性(affinity) C ...

  8. linux进程的几种状态

    Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态. Linux进程状态:R (TASK_RUNNING),可执行状态. 只有在该状 ...

  9. 转 Linux进程状态分析

       众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的.linux就是这样的一个操作系统.在linux系统中,每个被运行的程序实例对应一个或多个进程.l ...

随机推荐

  1. [Luogu] 树

    https://www.luogu.org/problemnew/show/P4092 树剖 + 线段树区间修改,单点查询 #include <bits/stdc++.h> using n ...

  2. Codeforces Round #580 (Div. 2)

    这次比上次多A了一道,但做得太慢,rating还是降了. Problem A Choose Two Numbers 题意:给出两个集合A,B,从A,B中分别选出元素a,b使得a+b既不属于集合A,又不 ...

  3. jQuery系列(十一):jQuery的事件绑定和解绑

    1.绑定事件 语法: bind(type,data,fn) 描述:为每一个匹配元素的特定事件(像click)绑定一个事件处理器函数. 参数解释: type (String) : 事件类型 data ( ...

  4. Linux设备驱动程序 之 并发及其管理

    竞态产生 Linux系统找那个存在大量的并发联系,因此会导致可能的竞态: 1. 正在运行的用户空间进程可以以多种组合方式访问我们的代码: 2. SMP系统甚至可以再不同的处理器上同时执行我们的代码: ...

  5. DS-博客作业07

    1.本周学习总结(0--2分) 1.1思维导图 1.2 谈谈你对查找运算的认识及学习体会. 在查找这一章,我学习的比较认真,但是还是有部分没太清楚.这章没有前一章树那么多的代码要记,但是还是要用心. ...

  6. how to force git to overwritten local files

    最佳解决方法 重要提示:如果您有任何本地更改,将会丢失.无论是否有--hard选项,任何未被推送的本地提交都将丢失. 如果您有任何未被Git跟踪的文件(例如上传的用户内容),这些文件将不会受到影响. ...

  7. XGBoost原理简介

    XGBoost是GBDT的改进和重要实现,主要在于: 提出稀疏感知(sparsity-aware)算法. 加权分位数快速近似学习算法. 缓存访问模式,数据压缩和分片上的实现上的改进. 加入了Shrin ...

  8. win10下EditPlus不能拖拽打开文件

    今天找到篇blog,终于把win10下EditPlus不能拖拽打开文件的问题解决了:) 记录下备忘.之前通过注册表的方式添加到右键菜单,当时设置了EditPlus以管理员身份运行: 解决办法=> ...

  9. mac中的word内容丢失

    改了一晚上好不容易快搞完了,结果1万字的内容丢了,并且不知道自己当时怎么想的还清理了回收站 还是用mac自带的工具吧,同时代码也要及时上传github

  10. vscode如何右键选择浏览器运行html文件

    我们利用Vscode软件编写html的时候,一般都想右键选择html文件,然后直接选择浏览器运行,但是默认是没有的: 下面鄙人给大家分享一下如何设置. 这里你会发现有好多类似的插件,你自己选择一个喜欢 ...