SoftwareComo limitar el uso de la CPU de una aplicación determinada en Linux

muy interesante, cpulimit está en los repositorios de debian, supongo que en los de ubuntu tambien

Cpulimit tambien está en los repositorios de kubuntu.

descargado (aprox. 5 MB):

$ sudo aptitude install cpulimit

... instalado, y probado. Si se ejecuta de la siguiente manera:

$ cpulimit -e firefox -l 60
Warning: cannot renice.
To work better you should run this program as root, or adjust RLIMIT_NICE.
For example in /etc/security/limits.conf add a line with: * - nice -10

Process 6034 detected

ya no será posible usar esa terminal porque el proceso cpulimit está ejecutándose, además al no haberse ejecutado como root el sistema no podrá usar renice, y para detenerlo hay que pulsar CTRL+C :

Exiting...

tras lo cual el proceso firefox vuelve a disparar su consumo al 100% (en mi caso).

Por lo anterior se debería usar con sudo así:

$ sudo cpulimit -e firefox -l 60
[sudo] password for siddharta:
Process 6034 detected

pero se vuelve a quedar en espera de CTRL+C por lo tanto no es posible usar la línea de comandos. Hay que volver a cancelar con CTRL+C:

Exiting...

El parámetro & es útil cuando se desea ejecutar un proceso en segundo plano (background), por ejemplo así:

$ sudo cpulimit -e firefox -l 60 &
[1] 7398
$

el problema es que, aunque se creó la tarea [1] con su identificador de proceso 7398, el sistema no pidió la contraseña por lo tanto realmente no se aplicó la configuración y firefox sigue al 100%. Así que hay que matar la tarea usando SIGTERM (signal terminate -15):

$ sudo kill -15 7418
[sudo] password for siddharta:

[1]+  Stopped                 sudo cpulimit -e firefox -l 60
$

Nota: SIGKILL (signal kill -9) sólo se debe usar en casos extremos, com último recurso, ya que puede dañar el proceso cpulimit o el proceso firefox.

Así que finalmente lo que se debe hacer es, iniciar sesión como root, invocar el proceso y mandarlo a segundo plano con & y salir de la sesión de root:

$ sudo su
[sudo] password for siddharta:
#
# cpulimit -e firefox -l 60 &
[1] 7411
# Process 6034 detected <--- presionar Enter
#
# exit
$

Listo, cuando se quiera matar el proceso cpulimit sólo basta recordar el número de la tarea [1] o su número de proceso (PID 7411) y enviarle SIGTERM (-15):

$ sudo kill -15 7411
[sudo] password for siddharta:

[1]+  Stopped                 sudo cpulimit -e firefox -l 60
$

O usar alguna herramienta como top o htop y buscar el proceso para saber su PID y matarlo desde ahí.

Voy a crear esta entrada en mi blog :)