使用taskset绑定进程后,如何查询各CPU核心的共享进程?
当然可以!这事儿在Linux下有好几种靠谱的办法,能精准拿到你想要的「核心X对应进程列表」的结果,我给你挨个说清楚:
1. 用
ps 命令快速输出结构化结果 这是最直接的命令行方式,不需要额外安装工具,一行命令就能搞定:
ps -eo pid,pcpu,cmd,psr | sort -k4n
参数解释:
pid:进程IDpcpu:进程当前的CPU使用率cmd:进程的命令名称psr:当前进程正在运行的CPU核心编号
最后的sort -k4n是按核心编号(第4列)从小到大排序,这样你就能清晰看到每个核心下对应的所有进程了。
2. 用
htop 可视化查看(更直观) 如果你的系统装了htop(没装的话用包管理器装就行,比如apt install htop),它的可视化界面会更友好:
- 打开
htop后按F2进入设置界面 - 找到「Display options」,勾选「CPU per process」选项
- 按
F10保存设置返回主界面
现在每个进程的右侧会显示它当前运行的核心编号,你还可以点击「CPU」列进行排序,快速把同一核心的进程归到一起。
3. 解析
/proc 文件系统(自定义脚本方式) Linux的/proc虚拟文件系统里存着所有进程的实时状态信息,你可以写个简单的Shell脚本批量遍历核心和进程,输出你想要的格式:
# 遍历所有CPU核心(自动获取系统总核心数) for core in $(seq 0 $(($(nproc) - 1))); do echo "核心 $core 运行的进程:" # 遍历所有进程ID for pid in $(ls /proc | grep '^[0-9]\+$'); do # 检查进程状态文件是否存在(避免进程突然退出的情况) if [ -f /proc/$pid/stat ]; then # 从/proc/<pid>/stat中提取当前运行的核心(第40个字段) current_core=$(awk '{print $40}' /proc/$pid/stat) if [ "$current_core" -eq "$core" ]; then echo -n "$pid " fi fi done echo -e "\n" done
运行这个脚本后,就会直接输出每个核心对应的进程ID列表,完全符合你的需求。
小提示
要区分「进程允许运行的核心」和「当前实际运行的核心」:
- 用
taskset -p <pid>可以查看进程被绑定的亲和性核心列表(也就是它允许运行的核心) - 上面的方法都是查看进程当前实际正在运行的核心,这才是你要的共享情况
内容的提问来源于stack exchange,提问作者Sabster
相关产品推荐
相关产品推荐

