En el comando del sistema Linux, el comando exit y el comando _exit parecen ser los mismos, pero la diferencia entre el comando exit y el comando _exit es diferente. Vamos a conocerlo.
NOTA: exit () es el parámetro de código de estado de salida pasan al salir del programa, 0 representa una salida normal, el otro representa una salida no normal, por lo general con 1 o -1, estándar C Hay dos macros EXIT_SUCCESS y EXIT_FAILURE, con exit (EXIT_SUCCESS); la legibilidad es mejor.
Como llamada al sistema, _exit y exit son un par de hermanos gemelos. En qué medida son similares, podemos encontrar la respuesta en el código fuente de Linux:
#define __NR__exit __NR_exit /* Extracto del archivo incluye /asm-i386 /unistd.h línea 334 * /
" __ NR_ " es el prefijo para cada llamada al sistema en el código fuente de Linux, tenga en cuenta que hay antes de la primera salida 2 subrayados, solo un subrayado antes de la segunda salida. Cualquiera que sepa C y tenga la cabeza clara dirá que no hay diferencia entre _exit y exit, pero hablemos de la diferencia entre los dos, que se refleja principalmente en su definición en la biblioteca. El prototipo de _exit en la biblioteca de Linux es:
#i nclude "unistd.h" void _exit (estado int);
Comparada con exit, la función exit () está definida en stdlib. h, y _exit () se define en unistd.h. Desde el nombre, stdlib.h parece ser un poco más alto que unistd.h. Entonces, ¿cuál es la diferencia entre ellos? La función _exit () es la más simple: para detener el proceso directamente, despejar el espacio de memoria que utiliza y destruir sus diversas estructuras de datos en el kernel; la función exit () crea algunas envolturas en estos cimientos, Algunos pasos se agregaron antes de la salida y, por este motivo, algunas personas piensan que salir no es una simple llamada al sistema. La mayor diferencia entre la función exit () y la función _exit () es que la función exit () comprueba la apertura del archivo antes de llamar a la llamada del sistema exit, y vuelve a escribir el contenido del búfer en el archivo, es decir, "limpia la E /S". Buffer y ".
exit () Antes de finalizar el proceso que lo llamó, realice los siguientes pasos:
1. Llame a la función registrada por atexit () (función de exportación); llame en el orden inverso al registro ATEXIT Todas las funciones registradas por él, lo que nos permite especificar que realizaremos nuestras propias acciones de limpieza cuando finalice el programa. Por ejemplo, guardar la información de estado del programa en un archivo, desbloquear bloqueos en una base de datos compartida, etc.
2.cleanup (); cierra todas las secuencias abiertas, lo que provocará que se escriba toda la salida en búfer, y se eliminarán todos los archivos temporales creados con la función TMPFILE.
3. Finalmente, se llama a la función _exit () para finalizar el proceso.
_exit hace 3 cosas (man): 1, todos los descriptores de archivos abiertos que pertenecen al proceso están cerrados 2, cualquier proceso secundario es heredado por el proceso 1, init 3, se envía el padre del proceso una señal SIGCHLD
salir Después de que se realiza la limpieza, se llama a _exit para finalizar el proceso.
Además, otra explicación:
En pocas palabras, la función de salida terminará el proceso de llamada. Antes de salir del programa, todos los archivos se cierran, la salida almacenada en búfer actualizará la definición y se llamarán todas las funciones actualizadas de < export " (definidas por atexit).
_exit: esta función está definida por Posix y no ejecuta manejadores de salida ni manejadores de señales. No descarga flujos de E /S estándar en sistemas UNIX.
En pocas palabras, _exit finaliza el proceso de llamada, pero no cierra el archivo, no borra la caché de salida y no llama a la función de salida.
Común:
Independientemente de cómo termine el proceso, el núcleo cerrará todos los descriptores de archivos abiertos por el proceso, ¡liberando la memoria utilizada por el proceso!
Anterior12Siguiente Total 2 Páginas
Cualquier computadora que se ejecute por mucho tiempo estará caliente, la computadora del sistema Ub
Si crea muchas sucursales cuando usa git en Linux, y luego no necesita usarlo, es m
En Linux, hay muchas formas de hacer una copia de seguridad del sistema. Además de
Recientemente, muchos usuarios de Linux han experimentado problemas al usar OpenSSH. La solución es
Cómo usar la función para obtener tiempo de nivel ns en Linux
Cómo instalar Linux para configurar la base de datos MariaDB
Solución de fallas de arranque de grub2 en Linux
Cómo Linux optimiza el rendimiento modificando los parámetros
Cómo cambiar la fecha y la hora de un sistema Linux utilizando la línea de comandos
El sistema Linux usa comandos para mantener el método RHCS
La configuración de Ubuntu y el uso del método MPI
Cómo configurar la red usando vim en CentOS
Cómo desactivar los accesos directos alternativos en el sistema Ubuntu
¿Cómo cambiar el nombre de la tarjeta multi-red de linux?
Cómo unirse a dominio de AD servidor Linux
La computadora del sistema Notebook Win7 apaga el sonido de arranque a través de la BIOS
¿Dónde está el caché de flash win7
Método para reinstalar el sistema Windows 8 y retener el estado de activación del sistema
No es necesario alinearse: 12306 habilidades de reserva en línea Raiders
Proteja su visión Los ajustes de color del sistema Win7 lo hacen más saludable
2011 el disco duro del sector de gran capacidad acelera la desaparición de WinXP
Cómo WinXP cambia el orden de la letra de la unidad de CD-ROM