类似于ulimit或cpulimit的东西会很好. (只是为了确保:我不想限制百分比使用或执行时间.我想强制app(包括所有孩子,进程(线程))使用一个cpu核心(或’n’cpu核心)).
解决方法:
在Linux下,执行sched_setaffinity系统调用.进程的亲和性是它可以运行的一组处理器.有一个标准的shell包装器:taskset.例如,要将进程固定到CPU#0(您需要选择一个特定的CPU):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -p 0 1234 # set the affinity of a running process
Perl(Sys::CpuAffinity)和Python(affinity)都有第三方模块来设置进程的亲和性.这两个都适用于Linux和Windows(Windows可能需要其他带有Sys :: CpuAffinity的第三方模块); Sys :: CpuAffinity也适用于其他几种unix变体.
如果要从出生时设置进程的亲和性,请在调用execve之前立即设置当前进程的亲和性.这是一个简单的包装器,它强制进程在CPU 0上执行.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV
标签:linux,cpu,process,limit
来源: https://codeday.me/bug/20190808/1621968.html