Articulo de referencia

esperar (llamada al sistema)

En los sistemas operativos de computadoras , un proceso (o tarea ) puede esperar a que otro proceso complete su ejecución. En la mayoría de los sistemas, un proceso padre puede ...

En los sistemas operativos de computadoras , un proceso (o tarea ) puede esperar a que otro proceso complete su ejecución. En la mayoría de los sistemas, un proceso padre puede crear un proceso hijo que se ejecuta de forma independiente . El proceso padre puede entonces realizar una llamada al sistema `wait` , que suspende su ejecución mientras el hijo se ejecuta. Cuando el proceso hijo finaliza, devuelve un estado de salida al sistema operativo, que luego se devuelve al proceso padre que estaba esperando. El proceso padre entonces reanuda su ejecución. [ 1 ]

Los sistemas operativos modernos también proporcionan llamadas al sistema que permiten que el hilo de un proceso cree otros hilos y espere a que terminen (" unirse a ellos") de manera similar.

Un sistema operativo puede proporcionar variaciones de la llamada wait que permiten a un proceso esperar a que cualquiera de sus procesos hijos finalice , o esperar a que finalice un único proceso hijo específico (identificado por su ID de proceso ).

Algunos sistemas operativos envían una señal ( SIGCHLD ) al proceso padre cuando un proceso hijo finaliza, notificando al proceso padre y permitiéndole recuperar el estado de salida del proceso hijo.

El estado de salida que devuelve un proceso hijo suele indicar si el proceso finalizó de forma normal o anormal . En el caso de una finalización normal, este estado también incluye el código de salida (normalmente un valor entero) que el proceso devolvió al sistema. Durante los primeros 20 años de UNIX, solo los 8 bits menos significativos del código de salida estaban disponibles para el proceso padre en espera. En 1989, con SVR4 , se introdujo una nueva llamada, waitid , que devuelve todos los bits de la llamada de salida en una estructura llamada siginfo_t , dentro del miembro de estructura si_status . Waitid es una parte obligatoria del estándar POSIX desde 2001.

Zombis y huérfanos

Cuando un proceso hijo finaliza, se convierte en un proceso zombi y permanece como una entrada en la tabla de procesos del sistema , aunque ya no se esté ejecutando activamente. En condiciones normales, su proceso padre lo espera inmediatamente y luego el sistema lo libera, recuperando así el recurso (la entrada en la tabla de procesos). Si un proceso hijo no es esperado por su padre, continúa consumiendo este recurso indefinidamente, lo que constituye una fuga de recursos . Estas situaciones suelen gestionarse mediante un proceso especial llamado "segador", que localiza los procesos zombi y recupera su estado de salida, permitiendo así que el sistema operativo libere sus recursos.

Por el contrario, un proceso hijo cuyo proceso padre finaliza antes que él se convierte en un proceso huérfano . Estas situaciones suelen gestionarse mediante un proceso raíz (o de inicialización) especial, que se asigna como nuevo padre de un proceso cuando su proceso padre finaliza. Este proceso especial detecta la finalización de un proceso huérfano y recupera su estado de salida, lo que permite al sistema liberar el proceso hijo finalizado.

Si un proceso hijo recibe una señal, el proceso padre que espera continuará su ejecución, dejando un proceso huérfano. Por lo tanto, a veces es necesario verificar el argumento establecido por wait, waitpid o waitid y, en caso de que WIFSIGNALED sea verdadero, esperar nuevamente a que el proceso hijo libere los recursos.

Véase también

Referencias

  1. "Esperar llamada al sistema en C" . GeeksforGeeks . 3 de junio de 2017. Consultado el 15 de mayo de 2023 .