Tabla de Contenidos
Administración de procesos
Un proceso es un programa que se está ejecutando, ya sea por el usuario o por el sistema Linux.
Linux puede ejecutar programas en segundo plano “transparentes al usuario”, así como varios programas al mismo tiempo, por lo que se le denomina “multitarea”.
Cuando un programa se está ejecutando en segundo plano hasta el infinito, se denomina “demonio” y suele llevar como última letra la d. Ejemplo: httpd (servidor web apache), crond (planificador de tareas de Linux), etc.
Todo proceso se identifica con un número de identificación denominado PID (Process IDentifier).
Para crear procesos, el núcleo Linux provee de dos instrucciones (existentes en cualquier lenguaje de programación):
- fork: crea un proceso “hijo” de uno principal.
- exec: ejecuta el código que sea necesario en ese proceso.
De esta forma, todo proceso es hijo de otro, creándose de esta manera un árbol de procesos.
El primer proceso del sistema Linux es init, su PID es 1 y todos los demás cuelgan de él. No es posible conocer a priori el PID de cualquier otro proceso hijo.
Visualización de procesos
ps
Permite ver la lista de procesos del sistema. Extrae toda la información del pseudosistema de archivos /proc en el que el núcleo de Linux coloca toda la información respecto al estado del sistema en curso de ejecución.
Tiene muchas opciones, que conviene consultarlas con la opción –help1), aunque de forma predeterminada muestra únicamente los procesos iniciados por el usuario desde el terminal.
Opciones comunes:
- ps aux: Muestra los procesos de todos los usuarios(a), y los que no están vinculados a un terminal (x), especificando el nombre de usuario y la fecha de inicio (u).
- ps -ef: Muestra todos los procesos(-e) y mucha información (-f).
- %CPU Porcentaje de tiempo que se ha usado el procesador desde la ejecución del comando.
- %MEM Porcentaje de uso de la memoria disponible.
- COMMAND o CMD Nombre del comando que originó el proceso.
- GID o GROUP Identificación del grupo bajo el que se ejecuta el proceso.
- NI Nivel de prioridad del proceso.
- PID Identificación del proceso.
- PPID Identificación del proceso padre.
- RSS Cantidad de memoria RAM utilizada en KB.
- START o STIME Fecha de lanzamiento del proceso.
- STAT Estado del proceso. Definido por tres caracteres:
- El primer carácter puede tomar alguno de estos valores:
- R Proceso ejecutándose (Running).
- T Proceso parado (sTopped).
- S Proceso dormido (Sleeping), esto es, en espera del procesador.
- D Proceso dormido en espera de un recurso (Device, normalmente de entrada/salida). No pueden interrumpirse.
- Z Proceso terminado. Se quedará en este estado hasta que el proceso padre se de cuenta y recupere su código de retorno (Zombie). No pueden interrumpirse.
- TIME Tiempo total de uso de la CPU para este proceso.
- TT o TTY Terminal al que está vinculado el proceso. Si no está asociado a ninguno (como un demonio) aparece el carácter ?.
- UID o USER: Identificación del usuario bajo el que se ejecuta el proceso.
top
Permite visualizar la actividad del procesador en tiempo real.
Tiene las mismas etiquetas que la instrucción ps, siendo posible modificar las columnas de información presentes y la ordenación de los procesos.
Con la tecla [?] visualizamos la ayuda del comando, y con la tecla [q] salimos de top. Para modificar los campos usamos la tecla [f]. También se puede enviar señales a los procesos con la tecla [k].
Podemos usar el archivo de configuración /etc/toprc para establecer una configuración global para todos los usuarios y otro en ~/.toprc (directorio personal del usuario), para establecer una configuración personalizada.
pstree
Muestra los nombres de los procesos de forma jerárquica, lo que nos permite ver rápidamente la filiación de los mismos.
Con la opción -p se muestra el PID de cada uno de ellos.
Este comando muestra una línea cuando existen varias instancias del mismo proceso, y el número que aparece delante de * indica el número de instancias correspondientes.
Monitor del sistema
Aplicación gráfica que podemos iniciar escribiendo en el lanzador Monitor del sistema.
Este programa tiene 3 pestañas que muestran diferente información:
- Procesos: Muestra los procesos que están funcionando en el sistema, así como información acerca de los mismos: ID, recursos que utilizan (memoria, %CPU), Usuario que lo ejecuta, etc. Pulsando el botón derecho sobre cada uno, podemos realizar algunas acciones sobre él (cambiar prioridad, detener, finalizar, etc). Podemos seleccionar los procesos que queramos ver filtrando por: si lo hemos ejecutado nosotros, sólo los activos o todos, así como si deseamos ver las dependencias.
- Recursos: Gráficas de uso de memoria, %CPU y red.
- Sistemas de archivos: Información acerca del % de uso del espacio de las particiones en uso por el sistema.
Señales: kill y killall
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 comando. killall debe usarse con precaución, ya que envía la señal a todos los procesos con el nombre pasado como argumento.
En ambos procesos es posible especificar la señal a enviar, aunque de forma predeterminada envían la señal 15 (SIGTERM, termina el proceso). Para obtener la lista completa de señales, se ejecuta kill -l. Para obtener información acerca de las señales, puede consultarse el manual, de la forma man 7 signal, así como leer el archivo /uar/include/asm/signal.h.
Trabajo con procesos
Iniciar un proceso.
Para iniciar un proceso, basta con introducir en el terminal el comando correspondiente. Esto hará que el proceso se ejecute en primer plano.
Si deseamos que el proceso se ejecute en segundo plano, y de esa forma no dejar sin uso el terminal, mientras éste se ejecuta, basta con introducir el carácter & al final de la línea del comando. Aparecerá entonces el PID de este proceso de forma informativa.
Detener un proceso
En caso de que el proceso se ejecute en primer plano, hay tres maneras de pararlo:
- ctrl + c: Se envía la señal 2 (SIGINT, finalización del proceso por interrupción desde el teclado) al proceso.
- ctrl + \: Se envía la señal 3 (SIGQUIT, finalización del proceso, previo guardado del espacio de memoria en un archivo llamado core (útil para la depuración de aplicaciones).
- Identificar el PID del proceso en otro terminal, y usar el comando kill de forma adecuada.
En el caso de que el proceso se esté ejecutando en segundo plano, sólo puede detenerse identificando su PID y deteniéndolo a través del comando kill.
Control de procesos
Al ser posible ejecutar varios procesos desde el mismo terminal al mismo tiempo (ya que algunos pueden estar ejecutándose en segundo plano), son necesarios algunos comandos para controlarlos.
jobs: lista de procesos
El comando jobs lista la lista de procesos que han sido iniciados desde el terminal actual.
bg y fg: toma de control de proceso
Si un proceso largo se ha iniciado en primer plano por error, no es necesario interrumpirlo para iniciarlo en segundo plano.
Hay que seguir estos pasos:
- ctrl + z: El proceso se suspende y el usuario puede tomar de nuevo el control del terminal.
- Se puede volver a ejecutar el proceso en primer plano con el comando fg, o en segundo plano con el comando bg.
- Para ello hay que introducir como argumento el número de job del proceso (entre corchetes, cuando se ejecutra el comando jobs) precedido por % (sin espacios).
