Una vez que el proceso llama a la espera, se bloquea de inmediato. La espera analiza automáticamente si se ha salido un proceso secundario del proceso actual. Si encuentra un proceso secundario que se ha convertido en un zombie, la espera recogerá el proceso secundario. La información y la devuelven después de destruir completamente; si no se encuentra dicho proceso secundario, la espera siempre se bloqueará aquí hasta que aparezca uno.
espera (espera de interrupción o finalización del proceso hijo) función relacionada waitpid, archivo de encabezado de bifurcación # include < sys /types.h > # include < sys /wait.h > función de definición pid_t wait (int * status) La función dice que wait () detendrá temporalmente la ejecución del proceso actual hasta que llegue una señal o el proceso hijo finalice. Si el proceso secundario ha finalizado cuando se llama a wait (), wait () devolverá inmediatamente el valor del estado final del proceso secundario. El estado de parámetro devuelve el valor de estado final del proceso hijo, y la identificación del proceso del proceso hijo se devuelve tan pronto como sea posible. Si no le importa el valor del estado final, el estado del parámetro se puede establecer en NULL. Para conocer el valor del estado final del proceso hijo, consulte waitpid (). El valor de retorno devuelve el ID de proceso hijo (PID) si la ejecución es exitosa, y -1 si ocurre un error. La razón de la falla está en errno.
Ejemplo uno # incluye < stdlib.h > # incluye < unistd.h > # include < sys /types.h > # include < sys /wait.h > int main () {pid_t pid; int status , i; if (fork () = = 0) {printf (" Este es el proceso hijo .pid =% d \\ n ", getpid ()); exit (5);} else {sleep (1); printf (" Este es el proceso padre, espere a child ... \\ n "; pid = wait (&status); i = WEXITSTATUS (status); printf (" child ’ s pid =% d .exit status = % d \\ n ", pid, i);}}
Ejecutar Este es el proceso hijo.pid = 1501 Este es el proceso padre. esperar a un hijo ... child ’ s pid = 1501, exit status = 5
Ejemplo 2
# incluye < iostream > # include < unistd.h > # include < sys /wait.h > usando namespace std; int main (void ) {pid_t pid; pid = fork (); if (pid < 0) exit (0); else if (pid == 0) {//Si el proceso hijo duerme durante 20 segundos cout < < " hijos: " < < getpid () < < endl; sleep (20);} else {cout < < " ¡hola! soy el proceso principal! " < < endl; //Si el proceso principal es Espera aquí pid_t pr = espera (N ULL); cout < < pr < < endl;} return 0;}
waitpid (esperando la interrupción o finalización del proceso hijo) función relacionada, archivo de encabezado de bifurcación # include < sys /types.h > # include < sys /wait.h > Defina la función pid_t waitpid (pid_t pid, int * status, int opciones); la descripción de la función waitpid () detendrá temporalmente la ejecución del proceso actual hasta que llegue una señal o el proceso secundario finalice. Si el proceso hijo ha finalizado cuando se llama a waitpid (), waitpid () devolverá inmediatamente el valor del estado final del proceso hijo. El estado de parámetro devuelve el valor de estado final del proceso hijo, y la identificación del proceso del proceso hijo se devuelve tan pronto como sea posible. Si no le importa el valor del estado final, el estado del parámetro se puede establecer en NULL.
El parámetro pid es el ID de subproceso que debe esperarse. Otros valores tienen el siguiente significado: pid < -1 Cualquier subproceso que espera que el ID de grupo de proceso sea el valor absoluto de pid. Pid = -1 Espere cualquier proceso hijo, equivalente a esperar (). Pid = 0 Cualquier proceso secundario que espera que el ID de grupo de proceso sea el mismo que el proceso actual. Pid > 0 espera cualquier proceso hijo cuyo ID de proceso hijo sea pid.
La opción de parámetro puede ser 0 o la siguiente combinación OR: WNOHANG Si no hay procesos secundarios que hayan finalizado, volverán de inmediato y no esperarán. WUNTRACED Devuelve inmediatamente si el proceso hijo ingresa en una ejecución suspendida, pero el estado final se ignora.
El estado final del proceso hijo se devuelve al estado. Hay varias macros para determinar la condición final: WIFEXITED (estado) no es cero si el proceso hijo finaliza normalmente. WEXITSTATUS (estado) obtiene el código de finalización devuelto por el proceso hijo exit (). Generalmente, se utiliza para determinar si finaliza normalmente utilizando WIFEXITED. WIFSIGNALED (estado) Si el subproceso finaliza debido a la señal, el valor macro es verdadero WTERMSIG (estado). El código de señal de que el subproceso se cancela debido a la señal generalmente es utilizado por WIFSIGNALED para juzgar la macro. WIFSTOPPED (estado) Este valor de macro es verdadero si el proceso hijo está en una ejecución suspendida. Este suele ser el caso solo cuando se utiliza WUNTRACED. WSTOPSIG (estado) Obtiene el código de señal que hace que el proceso hijo se detenga. Generalmente, WIFSTOPPED lo juzgará antes de usar esta macro.
Valor de retorno Devuelve el ID de proceso hijo (PID) si es exitoso, o -1 si ocurre un error. La razón de la falla está en errno.
Los ejemplos se refieren a esperar ().
Primero, descargue la dirección de descarga de magent: http://pan.baidu.com/s/1eRygtEUmkdir -p /usr
En el desarrollo de software, las tareas a menudo tienen que ir a la suspensión porque no se cumplen
En el desarrollo de los sistemas de LINUX integrados existentes, todos los ingenieros están cansados
El usuario puede hacer un mal uso del archivo grub.conf y hacer que falle el sistema operativo Lin
Programación del entorno Linux - solución detallada función ftok ()
Análisis detallado del proceso de compilación del kernel de Linux en un entorno VMware
Notas de instalación de Vmware Server para Linux y Windows
Modo de usuario único de Linux Suse para modificar la contraseña de root
Linux secuencia de inicialización controlador del núcleo de ajuste
Una descripción detallada del uso del comando strace en Linux
Aprendizaje de permisos de archivos de Linux
Subsistema vecino de la pila de protocolos de linux (recuperación de basura siete)
Utilice la función de inicio de sesión del código PIN del sistema Windows 10 con precaución.
Sistema Windows 7 Método de recuperación de los efectos de vidrio translúcido Aero
Dos formas de forzar la desinstalación de Windows Vista SP2
Windows8 formas de abrir el teclado de pantalla
Sistema Win8 /win8.1 para crear un método de tarjeta de red virtual tutorial
Win10 no reconoce la nueva solución de disco duro mecánico