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.