解决方法
这很简单.收集所有进程ID和线程ID,然后调用taskset.
pname="java" # for example for pid in $(pgrep "${pname}") do [ "${pid}" != "" ] || exit echo "PID: ${pid}" for tid in \ $(ps --no-headers -ww -p "${pid}" -L -olwp | sed 's/$/ /' | tr -d '\n') do taskset -cp "${tid}" # substitute thread id in place of a process id done done
PID: 15695 pid 15695's current affinity list: 0 pid 15696's current affinity list: 0 pid 15697's current affinity list: 0 ...
这不是一个简单的单行的原因是因为pgrep命令不能返回线程ID(只有进程ID).我们使用命令ps –no-headers -ww -p“${pid}”-L -olwp做了一些额外的工作
在Ubuntu 12上测试,bash 4.