查看方式:1、利用top命令linux源代码分析,该命令可以显示进程在那个CPU上运行,句型为“top-p进程号”;2、利用taskset命令linux系统iso下载,该命令用于查看进程或线程运行在那个CPU上,句型为“taskset-p进程号”。
本教程操作环境:linux7.3系统、DellG3笔记本。
linux如何查看进程在那个cpu上
方式一:使用top命令
top命令可以显示进程在那个CPU上运行,可以连续监视随着时间的改变,该进程运行在那个cpu上是否发生变化。
使用步骤:
top -p [进程号],例如 top -p 3000
按下F键,使用上下键选择P=LastUsedCpu,并按下空格键linux查看进程的线程数,出现“*”即代表选中,再按“q退出。
技巧二:使用taskset命令
taskset可以查看具体某一进程(或线程)运行在那个cpu上,也可以使某个程序运行在某个或个别cpu上
taskset参数选项:
(1)-p,--pid:操作现有的PID,不启动新任务
(2)-c,--cpu-list:指定处理器的数字列表,而不是位网段。列表可以包含多个项目,以冒号和范围分隔。诸如,0、5、7、9-11。
1)显示进程运行的CPU:-p参数
事例1:
[root@localhost ~]# taskset -p 21184
显示结果:
pid 21184’s current affinity mask: ffffff
注:21184是进程编号。显示结果的ffffff实际上是二补码24个高位均为1的bitmask,每一个1对应于1个CPUlinux查看进程的线程数,表示该进程在24个CPU上运行。
事例2:
[root@localhost ~]# taskset -p 2030
显示结果:
pid2030’s current affinity mask: f
注:说明sshd在4颗CPU上随机进行切换。
事例3:
[root@localhost ~]# taskset -p 2726
显示结果:
pid 2726’s current affinity mask: 3
注:显示的十补码数字3转换为2补码为最低两个是1,每位1对应一个cpu,所以进程运行在2个cpu上。
*注意:*cpu的标号是从0开始的,所以cpu1表示第二个cpu(第一个cpu的标号是0)。
关于换算方法
8个核心的CPUID:76543210
对应10的十补码数位:1286432168421
十六补码的16个数是:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
对应每一个16补码的二补码位:0=0000,1=0001,2=0010,3=0011,4=0100,5=0101,6=0110,7=0111,8=1000,9=1001,A=1010,
B=1011,C=1100,D=1101,E=1110,F=1111
这么比如出现pid8987’scurrentaffinitymask:ffff是16补码,转换二补码:11111111,意思就是sshd在8个CPU上进行却换!所以对应每一个数值!
例如说16补码的40,这么转换二补码01000000,意思就是在第7块CPU上运作
推荐学习:Linux教程
linux