Manejo de procesos en GNU/Linux

Anuncio
Universidad de Costa Rica | Escuela de Ingeniería Eléctrica
IE-0117 Programación Bajo Plataformas Abiertas
Manejo de procesos en GNU/Linux
Una de las características de los sistemas operativos tipo UNIX es que son multiproceso. Esto signica que pueden ejecutar varios procesos de forma «paralela». Este paralelismo es aparente, puesto que un el procesador de una computadora
solo puede ejecutar una operación a la vez. En realidad, el núcleo del sistema operativo, a través de un componente llamado planificador (scheduler) divide el tiempo del procesador entre todos los procesos activos. Los procesadores son tan
rápidos que el usuario no nota estas transiciones y percibe que todas las aplicaciones se ejecutan de forma consecutiva.
En los sistemas tipo UNIX, cada proceso tiene un identificador numérico conocido como PID (Process ID).
1.
Listado de procesos
Los procesos pueden listarse con el comando ps. De forma predeterminada ps sólo lista los procesos de la terminal
actual, sin embargo pueden agregarse opciones para obtener más información. Por ejemplo, ps aux muestra todos los
procesos del sistema, con sus respectivos usuarios.
Otros comandos que permiten ver los procesos son pstree y top. Otro comando útil es pgrep que puede usarse para
buscar el PID de un proceso a partir de su nombre.
2.
Múltiples procesos en una sola terminal
Cuando se trabaja en la interfaz gráfica es natural ejecutar varios programas a la vez. Pareciera que en una terminal
esto no es posible, sin embargo, GNU/Linux y otros sistemas operativos tipo UNIX brindan las herramientas necesarias
para lograr esto.
Los procesos que se ejecutan en el sistema pueden clasificarse en dos grupos. Los procesos que corren en el foreground
y los que corren en el background:
Procesos que corren en el foreground: procesos con los que el usuario interactúa. Un proceso en el foreground bloquea la terminal, evitando que el usuario pueda ejecutar nuevos procesos hasta que el proceso actual finalice.
Procesos que corren en el background: proceso que se ejecuta sin la intervención del usuario. A pesar de que están
siendo ejecutados, la línea de comandos está libre para utilizar nuevos comandos. Generalmente los procesos que
se corren en el background no generan ninguna salida, o bien su salida es guardada en archivos y no es impresa
en la terminal.
Es posible iniciar un proceso en el background agregando un & (ampersand) al final de la línea de comandos:
$ comando &
Además, la mayoría de los comandos pueden ser detenidos y enviados al background presionando la combinación
de teclas Ctrl-z. Nótese que esto también detiene el programa y no sólo lo envía al background.
Es posible usar el comando bg para reanudar un proceso detenido en el background, o bien fg para traerlo de vuelta
al foreground. Sí hay varios procesos en el background es necesario indicar cual es el proceso usando el identificador de
trabajo (que es distinto del PID). Esta información puede obtenerse con el comando jobs.
1
IE-0117 Programación Bajo Plataformas Abiertas
3.
Manejo de procesos en GNU/Linux
Señales
Las señales permiten que un proceso envíe un mensaje a otro. Existen 32 señales definidas en el estándar POSIX
(64 tomando en cuenta señales especiales para procesamiento en tiempo real). Algunas de ellas tienen un significado
definido, como la señal INT (2) que es la señal de interrupción que se envía cuando se presiona Ctrl-c o la señal KILL
(9), que finaliza un proceso. Otras señales están disponibles para el uso que especifiquen los programadores.
Es posible enviar señales desde la terminal usando el comando kill. Este comando toma como argumento la señal
que se desea enviar y el PID del proceso. Por ejemplo:
$ kill -KILL 34214
envía la señal KILL (9) al proceso 34214. También puede utilizarse el número de la señal, si existe:
$ kill -2 43432
envía la señal INT (2) al proceso 43432.
Existe también el comando killall, que toma como argumento el nombre del proceso. Este comando debe usarse
con cuidado, pues es posible que hayan varios procesos con el mismo nombre.
2
Descargar