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.
La ruta predeterminada en el sistema Linux generalmente es larga, parece muy inconveniente, entonces
Se puede decir que todos los sistemas operativos tienen operaciones de deshacer, y
Cuando usamos una computadora, a veces encontramos que la hora del sistema no funciona. Entonces, ¿c
Los usuarios de Linux a veces encuentran un error de inicio centos durante el uso. El error es el si
Linux usa scripts de shell para monitorear la integridad de las transferencias de archivos rsync
La aplicación del comando mkdir en Linux
¿Cómo utiliza CentOS las fuentes que vienen con Windows
Cómo instalar Gaim1.50 en el sistema Red Flag Linux
¿Qué debo hacer si Linux no puede ser de pantalla completa en VMWare VM?
Linux usando el comando diff para comparar archivos
Cómo eliminar y crear carpetas de Linux con comandos
Cómo representar la fuente del navegador Chrome en el sistema Linux
Solución para el contenedor Docker y el tiempo de sincronización del host
Cómo abrir la programación multiproceso en el sistema Linux
¿Error de mydumper de Linux libmysqlclient_16 no definido cómo hacerlo?
¿Qué debo hacer si la fuente china Win8.1 es muy vaga?
Comparta el permiso del navegador IE10 en win8 Paso
El truco para descubrir el virus troyano detrás de la imagen
Win10, el sistema operativo de nube real de Microsoft
Embellecimiento de la operación del sistema Xp Tutorial integral
Win7 sistema tres tipos comunes de razones de apagado automático y soluciones
Introducción e instalación de Active Directory (1)
El panel táctil Win8.1 afecta a la solución de escritura del teclado