Se sap que forquilla () La crida al sistema s'utilitza per crear un procés nou que esdevé fill del procés de la trucada.
A la sortida, el nen deixa un estat de sortida que hauria de retornar als pares. Així, quan el nen acaba es converteix en a zombi .
Sempre que el nen surt o s'atura, s'envia als pares a SIGCHLD senyal.
El pare pot utilitzar la crida del sistema wait() o waitpid() juntament amb les macros WIFEXITED i WEXITSTATUS per conèixer l'estat del seu fill aturat.
(*)wait() trucada al sistema : suspèn l'execució del procés de trucada fins que un dels seus fills finalitzi.
Sintaxi de la crida al sistema wait():
pid_t wait(int *status);
(*)La crida al sistema waitpid() : suspèn l'execució del procés de trucada fins que un fill especificat per l'argument pid hagi canviat d'estat.
Sintaxi de la crida al sistema waitpid():
pid_t waitpid(pid_t pid int *status int options)
Nota: de manera predeterminada, waitpid() només espera els fills finalitzats, però aquest comportament es pot modificar mitjançant l'argument d'opcions com ara WIFEXITED WEXITSTATUS, etc.
El valor de pid pot ser:
- Menys de -1 : vol dir esperar a qualsevol procés fill l'identificador del grup de processos del qual sigui igual al valor absolut de pid.
- Igual a -1 : vol dir esperar a qualsevol procés secundari.
- Igual a 0 : vol dir esperar a qualsevol procés fill l'identificador del grup de processos del qual sigui igual al del procés de trucada.
- Més gran que 0: vol dir que espera el nen l'identificador de procés del qual és igual al valor de pid.
WIFEXITED i WEXITSTATUS són dues de les opcions que es poden utilitzar per conèixer l'estat de sortida del nen.
WIFEXITED(estat): retorna cert si el fill ha finalitzat normalment.
WEXITSTATUS(estat): retorna l'estat de sortida del fill. Aquesta macro només s'hauria d'utilitzar si WIFEXITED torna veritat.
A continuació es mostra una implementació C en la qual el nen utilitza execl() funció però el camí especificat a execl() no està definit.
Vegem quin és el valor d'estat de sortida del fill que rep el pare.
// C code to find the exit status of child process #include #include #include #include #include // Driver code int main(void) { pid_t pid = fork(); if ( pid == 0 ) { /* The pathname of the file passed to execl() is not defined */ execl('/bin/sh' 'bin/sh' '-c' './nopath' NULL); } int status; waitpid(pid &status 0); if ( WIFEXITED(status) ) { int exit_status = WEXITSTATUS(status); printf('Exit status of the child was %dn' exit_status); } return 0; }
Sortida:

Nota: El codi anterior pot no funcionar amb el compilador en línia ja que fork() està desactivat.
Aquí l'estat de sortida és 127, que indica que hi ha algun problema amb el camí o hi ha una errada d'ortografia.
A continuació es mostren alguns codis d'estat de sortida per obtenir informació addicional:
- 1: errors diversos com ara "dividir per zero" i altres operacions inadmissibles.
-
2: falta la paraula clau, l'ordre o el problema de permís. - 126: El problema de permís o l'ordre no és un executable
- 128 : argument no vàlid per sortir.
Nota: l'estàndard C no defineix el significat dels codis de retorn. Les regles per a l'ús dels codis de retorn varien en diferents plataformes.