Introducción al conocimiento del proceso de Linux

  
                

Para los administradores de sistemas Linux, el conocimiento sobre los procesos de Linux debe tener un cierto entendimiento. Los procesos y los subprocesos se pueden confundir fácilmente. Solo cuando entienda completamente el proceso de Linux cometerá errores. Las siguientes series pequeñas le darán información detallada. Introducir el proceso de Linux.

Lo que realmente puede hacer la computadora es esencialmente muy simple, como calcular la suma de dos números, como encontrar una dirección en la memoria, etc. Estas acciones informáticas más básicas se llaman instrucciones. Un programa llamado es una colección de una serie de instrucciones. A través del programa, podemos dejar que la computadora complete operaciones complejas. La mayoría de las veces el programa se almacena como un archivo ejecutable. Dicho archivo ejecutable es como una receta, y la computadora puede preparar comidas deliciosas de acuerdo con la receta.

Entonces, ¿cuál es la diferencia entre un programa y un proceso?

Un proceso es una implementación concreta de un programa. Solo las recetas son inútiles, siempre seguimos las instrucciones de las recetas y las implementamos paso a paso para hacer los platos. Un proceso es un proceso de ejecución de un programa, similar al proceso de cocinar de acuerdo con una receta. El mismo programa se puede ejecutar varias veces, cada vez creando un espacio separado en la memoria para cargar, lo que resulta en múltiples procesos. Diferentes procesos también pueden tener sus propias interfaces IO independientes.

Una función importante del sistema operativo es facilitar el proceso, como asignar espacio de memoria para el proceso, administrar información sobre el proceso, etc., como si hubiéramos preparado una cocina hermosa para nosotros.

Observe el proceso

Primero, podemos usar el comando $ ps para consultar el proceso en ejecución, como $ ps -eo pid, comm, cmd, la siguiente figura es el resultado de la ejecución:

(indicador -e a la lista de todos los procesos, pid -o, comm, cmd decir que necesitamos PID, control, de información CMD) representa un proceso

cada fila. Cada línea está dividida en tres columnas. La primera columna PID (IDentity del proceso) es un entero. Cada proceso tiene un PID único para representar su propia identidad. El proceso también puede identificar otros procesos basados ​​en el PID. La segunda columna, COMANDO, es la abreviatura de este proceso. La tercera columna CMD es el programa correspondiente al proceso y los parámetros llevados en el tiempo de ejecución.

(La tercera columna está encerrada entre corchetes []. Son parte del núcleo y están diseñadas como procesos para facilitar la administración del sistema operativo. No tenemos que pensar en ellos.)

Veamos la primera línea, PID es 1, el nombre es init. Este proceso se genera ejecutando el archivo /bin /init (programa). Cuando se inicia Linux, init es el primer proceso creado por el sistema, y ​​este proceso persistirá hasta que apagemos la computadora. Este proceso es de especial importancia y lo seguiremos mencionando.

Cómo crear un proceso

De hecho, cuando la computadora está encendida, el núcleo solo crea un proceso de inicio. El kernel de Linux no proporciona una llamada al sistema para crear directamente un nuevo proceso. Todos los procesos restantes son creados por el proceso init a través del mecanismo de bifurcación. El nuevo proceso debe ser copiado por el proceso anterior, esta es la bifurcación. Fork es una llamada al sistema. El proceso vive en la memoria. A cada proceso se le asigna su propio espacio de direcciones en la memoria. Cuando el proceso se bifurca, Linux abre un nuevo espacio de memoria en la memoria para el nuevo proceso, y copia los contenidos del espacio de proceso antiguo al nuevo espacio, después de lo cual los dos procesos se ejecutan simultáneamente.

El proceso anterior se convierte en el proceso principal del nuevo proceso y, en consecuencia, el nuevo proceso es el proceso secundario del proceso anterior. Además de tener un PID, un proceso tendrá un PPID (PID principal) para almacenar el PID del proceso principal. Si seguimos el PPID continuamente, siempre encontraremos que la fuente es el proceso de inicio. Por lo tanto, todos los procesos también forman una estructura de árbol enraizada en init.

A continuación, consultamos el proceso de shell actual:

El código es el siguiente:

root @ vamei: ~ # ps -o pid, ppid, cmd

PID PPID CMD

16935 3101 sudo -i

16939 16935 -bash

23774 16939 ps -o pid, ppid, cmd

Podemos ver Por cierto, el segundo proceso bash es el proceso hijo del primer proceso sudo, y el tercer proceso ps es el proceso hijo del segundo proceso.

También puede usar el comando $ pstree para mostrar todo el árbol de procesos:

El código es el siguiente:

init─┬─NetworkManager─┬─dhclient

│ └ ─2 * [{NetworkManager}]

├─accounts-daemon─── {accounts-daemon}

├─acpid

├─apache2─┬─apache2 < Br>

│ └─2 * [apache2───26 * [{apache2}]]

├─at-spi-bus-laun───2 * [{at-spi-bus -laun}]

├─atd

├─avahi-daemon───avahi-daemon

bluetoothd

├─colord── ─2 * [{colord}]

├─console-kit-dae───64 * [{console-kit-dae}]

├─cron

├─cupsd───2 * [dbus]

├─2 * [dbus-daemon]

├─dbus-launch

├─dconf-service── ─2 * [{dconf-service}]

├─dropbox───15 * [{dropbox}]

───firefox───27 * [{firefo x}]

├─gconfd-2

├─geoclue-master

├─6 * [getty]

├─gnome-keyring- D───7 * [{gnome-keyring-d}]

├─gnome-terminal─┬─bash

│ ├─bash───pstree

│ ├─gnome-pty-helpe

│ ├─sh───R─── {R}

│ └─3 * [{gnome-terminal}]

fork generalmente se llama como una función. Esta función devolverá dos veces, devolviendo el PID del proceso secundario al proceso principal y devolviendo 0 al proceso secundario. De hecho, el proceso hijo siempre puede consultar su propio PPID para saber quién es el proceso principal, de modo que un par de procesos principales y procesos secundarios pueden consultarse entre sí en cualquier momento.

Normalmente, después de llamar a la función de bifurcación, el programa diseñará una estructura de selección if. Cuando el PID es igual a 0, indica que el proceso es un proceso secundario, luego deje que ejecute algunas instrucciones, como usar la función de biblioteca exec para leer otro archivo de programa y ejecutarlo en el espacio de proceso actual (esto es en realidad Usamos un gran propósito de fork: crear un proceso para un programa), y cuando el PID es un entero positivo, es un proceso padre y luego ejecuta otras instrucciones. Por lo tanto, una vez que se establece el proceso hijo, se puede ejecutar de manera diferente al proceso padre.

Terminación del proceso hijo

Cuando el proceso hijo termina, notifica el proceso padre y borra la memoria que ocupa, dejando su propia información de salida en el kernel ( El código de salida, si se ejecuta sin problemas, es 0; si hay un error o una condición anormal, es un número entero de "0". En este mensaje, explica por qué salió el proceso. Cuando el proceso principal sabe que el proceso secundario ha finalizado, es responsable de usar la llamada en espera del sistema para el proceso secundario. Esta función de espera puede tomar la información de salida del proceso hijo del kernel y despejar el espacio ocupado por la información en el kernel. Sin embargo, si el proceso principal finaliza antes que el proceso secundario, el proceso secundario se convierte en un proceso de orphand. El proceso huérfano se pasará al proceso de inicio, y el proceso de inicio se convertirá en el proceso principal del proceso. El proceso de inicio es responsable de llamar a la función de espera cuando el proceso secundario termina.

Por supuesto, un programa incorrecto también puede hacer que la información de salida del proceso secundario permanezca en el kernel (el proceso principal no llama a la función de espera en el proceso secundario), en cuyo caso el proceso secundario se convierte en un zombie. Proceso Cuando se acumula una gran cantidad de procesos zombi, el espacio de la memoria se comprime.

Procesos y subprocesos

Aunque en UNIX, los procesos y subprocesos son dos cosas diferentes, pero en Linux, los subprocesos son solo un tipo especial de proceso. El espacio de memoria y las interfaces de E /S se pueden compartir entre varios subprocesos. Entonces, el proceso es la única forma de implementar un programa de Linux.

Resumen

Programa, Proceso, PID, Espacio de memoria

Proceso secundario, Proceso principal, PPID, fork, espere

Lo anterior está relacionado con el proceso de Linux. Se introduce el conocimiento. A través de la lectura de este artículo, creo que usted tiene una comprensión más profunda del proceso de Linux, y es más fácil administrar el proceso de Linux.

Copyright © Conocimiento de Windows All Rights Reserved