cpulimit
é conhecido por não funcionar bem em alguns casos. Às vezes funciona muito bem (em aplicativos simples de thread único) e outras vezes (na maioria das vezes, mutli-thread ou muti-process) não funciona.
Tecnicamente falando, há dois problemas que podem fazer com que o cpulimit não seja limitado. A primeira é que o programa que você está tentando executar gera um thread ou processo de tal forma que o segmento gerado não seja um filho do segmento de desova. Existem várias razões para fazer isso, mas é um pouco incomum.
Segundo, o fato de o SIGSTOP não ser um sinal que pode ser "manipulado". Mas os sinais são assíncronos. Então Thread a pode gerar thread b. o thread a pode ser SIGSTOP'ed enquanto o thread b está sendo lançado e o thread b é iniciado sem o sinal.
O SIGSTOP também pausa um processo "quando pode". Há momentos, especialmente com o disco io, que um thread não seria pausável. O mais comum daqueles que eu posso pensar é o disco IO.
Em outras palavras, enquanto o SIGSTOP (o que o cpulimit usa) deve parar um encadeamento e todos os outros encadeamentos filhos, ele nem sempre o faz da maneira esperada em aplicativos multi-encadeados complexos que podem iniciar outros processos. Você seria mais bem atendido usando a otimização de agendamento tradicional (legal) nesses casos.