Administrar procesos en Linux

Publicado el 7 de Marzo ,2008 por ekhtor

Cuando ejecutamos un proceso en nuestra consola, muchas veces no nos paramos a pensar cómo o en que orden se ejecutan éstos, pero la verdad esque se hace de forma muy sencilla y ordenada.

Cualquier proceso puede estar en primer y segundo plano (basckground/foreground) pero siempre en consola, sólo habrá uno en primer plano que es cuando podremos interactuar con él.

Para ver toda la lista de procesos usaremos el comando ‘ps -A‘. Un ejemplo es el siguiente:

1975 ?        00:00:00 ksuspend_usbd
1976 ?        00:00:00 khubd
2075 ?        00:00:00 ata/0
2076 ?        00:00:00 ata_aux
2359 ?        00:00:00 scsi_eh_0
2360 ?        00:00:01 usb-storage
2373 ?        00:00:00 scsi_eh_1

El número que precede a cada proceso es el PID (Identificador de proceso) que sirve para enviar señales a los procesos.

La sintáxis es “kill -SEÑAL PID” y las señales más usadas son:

15 SIGTERM -> Solicita la terminación del proceso que la recibe.
9 SIGKILL -> Termina el proceso que la recibe de forma inmediata.
2 SIGINT -> Es la misma señal que se produce cuando un usuario en un programa interactivo presiona Control-c para solicitar su terminación.
20 SIGTSTP -> La misma señal producida por Control-z, envía el proceso a segundo plano para poner reanudarlo después.
18 SIGCONT -> Reanuda un proceso suspendido previamente por la señal SIGTSTP.
(Puede usarse tanto el número como el nombre de la señal pero nunca juntas: “kill- 9 PID”, “kill -SIGKILL PID”)

También podemos usar ‘killall nombre_del_proceso‘ para terminar la ejecución del programa. Esto es muy útil cuando tenemos varias instancias del programa en ejecución, como por ejemplo varias ventanas abiertas de firefox.

Cuando un proceso lo mandamos al segundo plano desde la consola por ejemplo pulsando Control-z éste aparece listado en las tareas o ‘jobs’.
El comando jobs nos muestra la lista de tareas suspendidas o en ejecución, pero antes de ver este comando, explicaré como mandar un proceso al segundo plano:

-Pulsando Control-z en la consola enviamos el programa que está en primer plano a segundo plano, y además lo suspendemos.

-Al ejecutar un programa podemos añadir al final de éste el caracter ‘&’, pero cuidado porque el programa continuará su ejecución y si manda algún mensaje a la consola se mostrará. Para evitar esto, desviamos las llamadas a la consola a /dev/null. Ejemplo ‘./script >> /dev/null &’. También tenemos que ser conscientes de que el programa que ejecutemos desde la consola será “proceso hijo” de la consola, por lo que si cerramos el terminal todos los procesos hijos finalizarán.

-La forma de que los procesos hijos no mueran al matar a los procesos padres, es escribiendo delante del programa o script “nohup” y detrás ‘&’. Nohup evita que las aplicaciones se cierren cuando reciban la señal de ‘hangup’ (de ahí el nombre) y además todas las llamadas a la consola las archiva en un log llamado nohup.out en el mismo directorio. Un ejemplo sería ‘nohup ./script &’ (el ‘&’ hace la misma función).
Si queremos que no almacene datos en nohup.out lo redirigimos como antes ‘nohup ./script >> /dev/null &’.

Ahora que ya sabemos como mandar las tareas a segundo plano, podemos empezar a usar los comandos ‘jobs’,'bg’,'fg’. Como comenté antes, ‘jobs’ nos muestra la lista de tareas en ejecución o suspendidas y también tienen su propio identificador entre corchetes [x]. Ejemplo:

ekhtor@servidor:~$ jobs

[1]   Running                 ./hola >> /dev/null &
[2]-  Running                 skype &
[3]+  Stopped                 skype

Como vemos hay tres tareas, dos en ejecución y una suspendida. En el caso de querer reanudar la ejecución de la tercera, el comando a usar sería ‘fg %3′, que provocaría su reanudación y pasaría a primer plano o foreground. Si lo que deseamos es sólamente, reanudarla sin pasarla a primer plano lo haremos con “bg %3″.

Por el contrario si quisiera suspender la tarea 2 que se encuentra en ejecución, usaría “kill -20 %2″ que es el equivalente al Control-z y para matarla, “kill -2 %2″ el equivalente a Control-c.

Básicamente estos son los comandos para gestionar los procesos y tareas en Linux sin mayor problema. Espero que les sirva de ayuda.

PD: Éste post ha sido idea de Jorge (Zebus), a quien espero que todo esto le haya servido para aclararse un poco más con los procesos, ¡Un saludo amigo!

Entradas Relaccionadas

  1. 1 Trackback(s)

  2. Mar 10, 2008: Procesos en Linux « Un dia duro

Publica un comentario

Comenta