上篇文章:嵌入式开发 Linux 常用命令系列 10 – linux 必用 跟踪系统调用和信号 命令 strace 详细介绍
下篇文章:嵌入式开发 Linux 常用命令系列 12 – linux 下 log 输出重定向 详细介绍
taskset 介绍
taskset命令是Linux下用于设置或获取进程的CPU亲和性的工具。所谓CPU亲和性是指将进程绑定到某一个或某几个CPU上执行,提高系统的性能。taskset命令允许你设置或检索给定进程的CPU亲和性。
基本使用方法如下:
taskset [选项] mask command [arg]... taskset [选项] -p [mask] pid
常用选项包括:
-p
: 操作已存在的进程的CPU亲和性,而不是启动新进程。-c
: 将CPU列表以逗号分隔的列表格式指定,而不是掩码。例如,0,1
表示进程只能在第一和第二个CPU上运行。
"mask
"是一个以十六进制形式表示的bit mask,使用CPU的序号表示。例如,01
表示只在第一个CPU上运行,03
表示可以在前两个CPU上运行。
一个基本的taskset使用示例:
taskset -c 0,1 command
这会将命令"command
"的执行限制在第一和第二个CPU上。
另一个示例,获取一个已存在进程的CPU亲和性:
taskset -p pid
这会显示进程pid的CPU亲和性。
使用taskset
命令时,你需要有适当的权限,通常这意味着需要root
权限。
如何获取当前cpu执行的任务有哪些?
可以使用taskset命令配合ps命令来查看特定CPU上正在运行的任务。
首先,我们可以使用taskset命令来查看每个进程的CPU亲和性。这可以通过指定-p选项和进程ID来实现。例如:
taskset -p [pid]
上面的命令会显示给定PID进程的CPU亲和性。
然后,你可以使用ps命令来查看所有正在运行的进程和它们的PID。例如:
ps -A
上面的命令会显示系统上所有正在运行的进程。
然后,你可以组合使用这两个命令来查看在特定CPU上运行的所有进程。例如,以下的脚本将会显示在CPU 0上运行的所有进程:
for pid in $(ps -A -o pid); do taskset -p $pid | grep -q "0,1" if [ $? -eq 0 ]; then echo $pid fi done
这段脚本首先会获取所有进程的PID,然后会使用taskset命令查询这些PID的CPU亲和性。如果一个进程的CPU亲和性包含CPU 0,那么这个脚本就会输出这个进程的PID。
更详细的使用见:
taskset -h
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]
Show or change the CPU affinity of a process.
Options:
-a, --all-tasks operate on all the tasks (threads) for a given pid
-p, --pid operate on existing given pid
-c, --cpu-list display and specify cpus in list format
-h, --help display this help
-V, --version display version
The default behavior is to run a new command:
taskset 03 sshd -b 1024
You can retrieve the mask of an existing task:
taskset -p 700
Or set it:
taskset -p 03 700
List format uses a comma-separated list instead of a mask:
taskset -pc 0,3,7-11 700
Ranges in list format can take a stride argument:
e.g. 0-31:2 is equivalent to mask 0x55555555
For more details see taskset(1).
上篇文章:嵌入式开发 Linux 常用命令系列 10 – linux 必用 跟踪系统调用和信号 命令 strace 详细介绍
下篇文章:嵌入式开发 Linux 常用命令系列 12 – linux 下 log 输出重定向 详细介绍