Unix / Linux - Gestión de procesos
En este capítulo, discutiremos en detalle sobre la gestión de procesos en Unix. Cuando ejecuta un programa en su sistema Unix, el sistema crea un entorno especial para ese programa. Este entorno contiene todo lo necesario para que el sistema ejecute el programa como si no se estuviera ejecutando ningún otro programa en el sistema.
Siempre que emite un comando en Unix, crea o inicia un nuevo proceso. Cuando probaste ellscomando para listar el contenido del directorio, inició un proceso. Un proceso, en términos simples, es una instancia de un programa en ejecución.
El sistema operativo rastrea los procesos a través de un número de identificación de cinco dígitos conocido como pid o la process ID. Cada proceso del sistema tiene unpid.
Los pids eventualmente se repiten porque todos los números posibles se agotan y el siguiente pid se lanza o comienza de nuevo. En cualquier momento, no existen dos procesos con el mismo pid en el sistema porque es el pid que Unix usa para rastrear cada proceso.
Iniciar un proceso
Cuando inicia un proceso (ejecuta un comando), hay dos formas de ejecutarlo:
- Procesos de primer plano
- Procesos de fondo
Procesos de primer plano
De forma predeterminada, todos los procesos que inicias se ejecutan en primer plano. Obtiene su entrada del teclado y envía su salida a la pantalla.
Puedes ver que esto sucede con el lsmando. Si desea enumerar todos los archivos en su directorio actual, puede usar el siguiente comando:
$ls ch*.doc
Esto mostraría todos los archivos, cuyos nombres comienzan con ch y terminar con .doc -
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
El proceso se ejecuta en primer plano, la salida se dirige a mi pantalla y si el ls comando quiere cualquier entrada (que no es así), la espera desde el teclado.
Mientras un programa se está ejecutando en primer plano y consume mucho tiempo, no se pueden ejecutar otros comandos (iniciar otros procesos) porque el indicador no estará disponible hasta que el programa termine de procesarse y salga.
Procesos de fondo
Un proceso en segundo plano se ejecuta sin estar conectado a su teclado. Si el proceso en segundo plano requiere alguna entrada de teclado, espera.
La ventaja de ejecutar un proceso en segundo plano es que puede ejecutar otros comandos; ¡no tiene que esperar hasta que se complete para iniciar otro!
La forma más sencilla de iniciar un proceso en segundo plano es agregar un ampersand (&) al final del comando.
$ls ch*.doc &
Esto muestra todos los archivos cuyos nombres comienzan con ch y terminar con .doc -
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
Aquí, si el ls comando quiere cualquier entrada (que no lo hace), entra en un estado de parada hasta que lo movimos al primer plano y le damos los datos del teclado.
Esa primera línea contiene información sobre el proceso en segundo plano: el número de trabajo y la identificación del proceso. Necesita saber el número de trabajo para manipularlo entre el fondo y el primer plano.
Presione la tecla Enter y verá lo siguiente:
[1] + Done ls ch*.doc &
$
La primera línea te dice que el lsEl proceso en segundo plano del comando finaliza correctamente. El segundo es un mensaje para otro comando.
Listado de procesos en ejecución
Es fácil ver sus propios procesos ejecutando el ps (estado del proceso) comando de la siguiente manera -
$ps
PID TTY TIME CMD
18358 ttyp3 00:00:00 sh
18361 ttyp3 00:01:31 abiword
18789 ttyp3 00:00:00 ps
Uno de los indicadores más utilizados para ps es el -f (f para completa), que proporciona más información, como se muestra en el siguiente ejemplo:
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
Aquí está la descripción de todos los campos mostrados por ps -f comando -
No Señor. | Columna y descripción |
---|---|
1 | UID ID de usuario al que pertenece este proceso (la persona que lo ejecuta) |
2 | PID Identificacion de proceso |
3 | PPID ID del proceso principal (el ID del proceso que lo inició) |
4 | C Utilización de CPU del proceso |
5 | STIME Hora de inicio del proceso |
6 | TTY Tipo de terminal asociado al proceso |
7 | TIME Tiempo de CPU que toma el proceso |
8 | CMD El comando que inició este proceso |
Hay otras opciones que se pueden utilizar junto con ps comando -
No Señor. | Opción y descripción |
---|---|
1 | -a Muestra información sobre todos los usuarios. |
2 | -x Muestra información sobre procesos sin terminales |
3 | -u Muestra información adicional como la opción -f |
4 | -e Muestra información ampliada |
Detener procesos
La finalización de un proceso se puede realizar de varias formas diferentes. A menudo, desde un comando basado en consola, el envío de una pulsación de tecla CTRL + C (el carácter de interrupción predeterminado) saldrá del comando. Esto funciona cuando el proceso se ejecuta en modo de primer plano.
Si un proceso se está ejecutando en segundo plano, debe obtener su ID de trabajo usando el psmando. Después de eso, puede usar elkill comando para matar el proceso de la siguiente manera:
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated
Aquí el kill comando termina el first_oneproceso. Si un proceso ignora un comando de interrupción regular, puede usarkill -9 seguido del ID del proceso de la siguiente manera:
$kill -9 6738
Terminated
Procesos padre e hijo
Cada proceso de Unix tiene dos números de identificación asignados: la identificación del proceso (pid) y la identificación del proceso principal (ppid). Cada proceso de usuario en el sistema tiene un proceso principal.
La mayoría de los comandos que ejecuta tienen el shell como padre. Comprobar elps -f ejemplo donde este comando enumera tanto el ID del proceso como el ID del proceso principal.
Procesos zombis y huérfanos
Normalmente, cuando se mata un proceso hijo, el proceso padre se actualiza mediante un SIGCHLDseñal. Luego, el padre puede hacer otra tarea o reiniciar a un nuevo niño según sea necesario. Sin embargo, a veces el proceso padre se mata antes de que se mata su hijo. En este caso, el "padre de todos los procesos", elinitproceso, se convierte en el nuevo PPID (ID de proceso principal). En algunos casos, estos procesos se denominan procesos huérfanos.
Cuando se mata un proceso, un ps La lista aún puede mostrar el proceso con un Zestado. Este es un proceso zombi o desaparecido. El proceso está muerto y no se está utilizando. Estos procesos son diferentes de los procesos huérfanos. Han completado la ejecución pero aún encuentran una entrada en la tabla de procesos.
Procesos de demonio
Los demonios son procesos en segundo plano relacionados con el sistema que a menudo se ejecutan con los permisos de root y solicitudes de servicios de otros procesos.
Un demonio no tiene una terminal de control. No se puede abrir/dev/tty. Si haces un"ps -ef" y mira el tty campo, todos los demonios tendrán un ? Para el tty.
Para ser precisos, un demonio es un proceso que se ejecuta en segundo plano, generalmente esperando que suceda algo con lo que es capaz de trabajar. Por ejemplo, un demonio de impresora esperando comandos de impresión.
Si tiene un programa que requiere un procesamiento prolongado, entonces vale la pena convertirlo en un demonio y ejecutarlo en segundo plano.
El comando superior
los top El comando es una herramienta muy útil para mostrar rápidamente procesos ordenados por varios criterios.
Es una herramienta de diagnóstico interactiva que se actualiza con frecuencia y muestra información sobre la memoria física y virtual, el uso de la CPU, los promedios de carga y sus procesos ocupados.
Aquí está la sintaxis simple para ejecutar el comando superior y ver las estadísticas de utilización de la CPU por diferentes procesos:
$top
ID de trabajo versus ID de proceso
Los procesos en segundo plano y suspendidos generalmente se manipulan mediante job number (job ID). Este número es diferente del ID del proceso y se usa porque es más corto.
Además, un trabajo puede constar de varios procesos que se ejecutan en serie o al mismo tiempo, en paralelo. Usar la identificación del trabajo es más fácil que rastrear procesos individuales.