Cerramos del 10/08 al 18/08. Los pedidos cursados a partir del 09/08 a las 12.00 hora de España peninsular se tramitarán el 19/08/2024.
Cerramos del 10/08 al 18/08. Los pedidos cursados a partir del 09/08 a las 12.00 hora de España peninsular se tramitarán el 19/08/2024.
  1. Libros
  2. Linux
  3. Administración de procesos
Extrait - Linux Principios básicos de uso del sistema (8ª edición)
Extractos del libro
Linux Principios básicos de uso del sistema (8ª edición)
2 opiniones
Volver a la página de compra del libro

Administración de procesos

Introducción

Un proceso es un programa o un comando en curso de ejecución en un sistema. Linux puede ejecutar varios procesos al mismo tiempo y es posible iniciar varias instancias de un mismo programa simultáneamente.

El término "tarea" equivale al término "proceso". Por ello se califica a Linux de sistema multitarea.

Un proceso demonio es un proceso que se ejecuta permanentemente en el sistema; su código se repite hasta el infinito para esperar y estar a punto cuando un usuario solicite el servicio al que está vinculado. Los nombres de los demonios terminan generalmente en d; encontramos por ejemplo los demonios crond (planificación de tareas), httpd (servidor web Apache) y cupsd (impresión) en un sistema Linux.

Árbol de procesos y PID

Todo proceso se identifica por un número único, el PID (Process IDentifier); el núcleo utiliza una tabla de procesos para la gestión de las tareas.

Dos primitivas del núcleo Linux permiten crear procesos: fork y exec (estas primitivas programables pueden llamarse desde un lenguaje como el C). La primera permite que un proceso cree un clon de sí mismo, la segunda la usa ese clon para ejecutar el código de otro programa en su lugar. De ello resulta una filiación entre procesos; así, se habla de procesos hijos y de procesos padres.

Todo proceso tiene, pues, obligatoriamente un padre, salvo el primer proceso del sistema: init para las distribuciones que se inician siempre según el método SysV, o systemd en la mayoría de las distribuciones recientes. Cualquiera de los dos son el antecesor de todos los procesos del sistema y su PID es 1.

El PID asignado a un proceso lo da el núcleo de Linux al iniciar el programa. No existe forma de predecir este número.

Visualización de los procesos

1. ps

El comando ps permite ver la lista de procesos del sistema: presenta una imagen simplificada de las estructuras del núcleo que administran los procesos. Extrae toda la información del pseudosistema de archivos /proc en el que el núcleo coloca toda la información respecto al estado del sistema en curso de ejecución.

De modo predeterminado, este comando muestra únicamente los procesos iniciados por el usuario desde el terminal; por ejemplo:

[javier]$ ps 
  PID TTY          TIME CMD 
 1200 pts0     00:00:00 bash 
 1239 pts0     00:00:00 ps 

Este comando cuenta con muchas opciones. Además, acepta opciones de Unix98 (con -), BSD (sin -) y GNU (formato largo con --). Veamos un ejemplo en castellano en Ubuntu:

javier@javier-VirtualBox:~$ ps -ayuda 
 
Uso: 
 ps [opciones] 
 
 Intente "ps --ayuda <simple|lista|salida|hilos|varios|todos>" 
 o "ps --ayuda <s|l|a|h|v|t>" 
 para más texto de ayuda. 
 
Para más información vea ps(1). 
javier@javier-VirtualBox:~$ ps --ayuda todos 
 
Uso: 
 ps [opciones] 
 
Opciones básicas: 
 -A, -e         todos los procesos 
 -a             todo con tty, excepto líderes de sesión 
  a             todo con tty, incluyendo otros usuarios 
 -d             todo excepto líderes de sesión 
 -N, --deselect anula la selección 
  r             solo procesos en ejecución 
  T             todos los procesos en este terminal 
  x             procesos sin controlar ttys 
 
Selección por lista: 
 -C <comando>        nombre de comando 
 -G, --Group <GID>   id de grupo real o nombre 
 -g, --group...

Señales y comando kill

Los comandos kill y killall permiten enviar señales a los procesos. El comando kill espera un número de proceso como argumento, mientras que killall espera un nombre de comando.

El comando killall debe utilizarse con mucha precaución porque envía la señal a todos los procesos con el nombre pasado como argumento.

Estos dos comandos pueden, opcionalmente, recibir un número de señal como argumento. De modo predeterminado, ambos envían la señal 15 (ver más adelante) a los procesos pasados como argumento:

kill [-<señal>] <pid> ... 

Un usuario normal sólo puede enviar una señal con estos comandos a sus propios procesos.

Es posible obtener la lista de señales disponibles con la opción -l del comando kill:

[javier]$ kill -l 
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL 
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE 
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2 
13) SIGPIPE     14) SIGALRM     15) SIGTERM     17) SIGCHLD ...

Administradores de procesos gráficos

Existe evidentemente una amplia gama de herramientas gráficas de administración de procesos.

Por ejemplo, el "Monitor del sistema GNOME" funciona también con el entorno de escritorio KDE y se inicia con el comando gnome-system-monitor:

images/CAP08IMG01.PNG

Trabajo con procesos

1. Iniciar un proceso

En primer plano

Les ejemplos presentados hasta ahora funcionan como programas iniciados en primer plano, es decir, procesos que pasan el control al usuario sólo cuando terminan.

Esta ejecución de un programa se realiza escribiendo simplemente el comando correspondiente en la línea de comandos con sus eventuales opciones y argumentos.

Por ejemplo:

[javier]$ sleep 10 
              (espera de 10 segundos) 
[javier]$ 

El comando sleep, utilizado en el ejemplo, se limita a esperar el número de segundos indicados en el argumento; debemos imaginar en su lugar un comando largo, como una copia de seguridad o la compilación de un programa, que, ejecutado de esta manera, penalizaría el trabajo del usuario.

En segundo plano

Para no verse obligados a esperar el fin del programa antes de poder iniciar otro, es posible ejecutar un comando en segundo plano; así, la línea de comandos reaparece inmediatamente y el usuario puede escribir nuevos comandos.

Para iniciar un proceso en segundo plano, basta con agregar el carácter & al final de la línea de comando:

[javier]$ sleep 10 & 
[1] 2004 
[javier]$ 

La línea situada después del comando sólo aparece a título indicativo y no interfiere en nada con los tratamientos que puede efectuar el comando. El número entre corchetes identifica el trabajo (número de "job") del proceso en el shell actual; el segundo indica el número de PID que el núcleo ha asignado a este proceso.

Un poco más tarde, al actualizarse la línea de comandos del shell y cuando el proceso que se ejecutaba en segundo plano finaliza, el shell muestra:

[javier]$  
[1]+ Done                    sleep...

Ejercicio

Ejercicio

Ejecute el comando top y deténgalo luego enviándole la señal SIGTERM.

Solución

El comando top muestra los procesos activos según prioridad y por esto, salvo si el sistema está en el momento muy demandado, deberá mostrar su propio proceso en las primeras líneas.

images/08-02.png

Sin salir del comando top, debemos pulsar la tecla [k], y luego introducir el PID señalado antes, 18778 en este ejemplo. La interfaz solicita ahora la señal a ser enviada al proceso y basta con dejar el valor por defecto para la señal SIGTERM y validar con la tecla [Intro].