No Linux, execute a sched_setaffinity chamada do sistema. A afinidade de um processo é o conjunto de processadores nos quais ele pode ser executado. Há um wrapper de shell padrão: taskset . Por exemplo, para fixar um processo à CPU nº 0 (você precisa escolher uma CPU específica):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -p 0 1234 # set the affinity of a running process
Existem módulos de terceiros para o Perl ( Sys::CpuAffinity ) e o Python ( affinity ) para definir a afinidade de um processo. Ambos funcionam no Linux e no Windows (o Windows pode exigir outros módulos de terceiros com Sys::CpuAffinity ); Sys::CpuAffinity também funciona em várias outras variantes unix.
Se você quiser definir a afinidade de um processo a partir do momento de seu nascimento, defina a afinidade do processo atual imediatamente antes de chamar execve . Aqui está um wrapper trivial que força um processo a ser executado na CPU 0.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV