Linux espera función de análisis

  
 

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 ().

Copyright © Conocimiento de Windows All Rights Reserved