Adm*_*mia 13 bash cpu process affinity
有没有办法强制进行具有特定PID的进程,只能在服务器的一个cpu上执行和运行?我知道有这样的命令
taskset -cp <Cpu_Number> <Pid>
Run Code Online (Sandbox Code Playgroud)
但上面的命令在我的系统上不起作用.如果还有其他命令,请告诉我.
sjs*_*sam 17
有两种方法可以将cpu核心/核心分配给正在运行的进程.
第一种方法:
taskset -cp 0,4 9030
Run Code Online (Sandbox Code Playgroud)
很清楚!将cpu核0和4分配给pid 9030.
第二种方法:
taskset -p 0x11 9030
Run Code Online (Sandbox Code Playgroud)
这有点复杂.后面的十六进制数-p
是一个位掩码.可在此处找到解释,其摘录如下:
CPU亲和性表示为位掩码,最低位对应于第一个逻辑CPU,最高位对应于最后一个逻辑CPU.并非所有CPU都可能存在于给定系统上,但掩码可能指定的CPU数量多于现有CPU数量.检索到的掩码将仅反映与系统上物理上的CPU相对应的位.如果给出了无效掩码(即,对应于当前系统上没有有效CPU的掩码),则返回错误.掩码通常以十六进制给出.
仍然困惑?看下图:
我添加了对应于十六进制数的二进制文件,处理器从左开始从零开始计数.在第一个例子中,在位one
掩码中有一个对应于第zero
th个处理器,因此处理器将被启用进程.zero
必须禁用在位掩码中具有相应位置的所有处理器.事实上,这就是它被称为面具的原因.
说完所有这些后,使用taskset更改处理器关联性需要:
用户必须拥有CAP_SYS_NICE才能更改进程的CPU关联.任何用户都可以检索关联掩码.
您可能有兴趣看一下处理CAP_SYS_NICE的SO问题.
我的资源