Waitpid
Monitorear estados de proceso
Last updated
Monitorear estados de proceso
Last updated
La llamada del sistema wait
tiene múltiples limitaciones y, para cubrir funciones más avanzadas, es necesario utilizar la función waitpid
. Es decir, si un proceso crea varios hijos y el padre necesita supervisar a un hijo específico, solo waitpid
puede hacer esto.
Waitpid devuelve el ID del proceso del hijo que terminó, o cero si se utilizó WNOHANG y no hay hijo disponible, o -1 en caso de error (en este caso, errno se pone a un valor apropiado).
El waitpid
toma tres argumentos, el primero de los cuales es el número de identificación del proceso (pid). PID puede tener múltiples valores prediseñados con diferentes efectos:
< -1 --> Espere cualquier proceso secundario cuyo ID de grupo de procesos sea igual al valor absoluto de pid
-1 --> se puede pasar para monitorear cualquier proceso hijo que cambie su estado primero, que se usa para implementar la funcionalidad wait
.
0 --> Espere cualquier proceso secundario cuyo ID de grupo de procesos sea igual al del proceso que llama
>0 --> implica que el valor debe ser el ID de proceso real que se devolvió desde la función fork
, que a su vez se usa para monitorear solo un proceso hijo específico
El segundo argumento es de tipo puntero int
y debemos declarar una variable entera para pasar su dirección a la función. waitpid
, por otro lado, almacenará la información del estado del niño en la variable int
dada, que luego se puede decodificar usando las macros predefinidas. este es el mismo argumentos que se le pasa a wait.
El último argumento es de tipo int
, y se usa para especificar ciertos eventos de proceso hijo a monitorear además de los predeterminados.
Para oder monitorizar los procesos se utilizan las siguientes macros, pero en caso de que no quieras hacerlo se puede pasar el parametro 0.
WNOHANG --> significa que vuelve inmediatamente si ningún hijo ha terminado. Solo chequea, no espera a que termine el proceso.
WUNTRACED --> que significa que también vuelve si hay hijos parados (pero no rastreados), y de cuyo estado no ha recibido notificación. El estado para los hijos rastreados que están parados también se proporciona sin esta opción.
WCONTINUED --> También devolver si un hijo detenido ha sido retomado por entrega de SIGCONT
.