In genere si utilizzano WNOHANG e WUNTRACED in diversi casi.
Caso 1: Supponiamo di avere un processo che genera un gruppo di bambini e deve fare altre cose mentre i bambini sono in esecuzione. Questi bambini a volte escono o vengono uccisi, ma il kernel manterrà il loro stato di uscita fino a quando alcuni altri processi lo richiederanno tramite wait() o waitpid(). Quindi, il tuo processo genitore deve chiamare a volte wait()/waitpid() per consentire al kernel di liberarsi dei resti del figlio. Ma non vogliamo wait()/waitpid() al blocco , perché, in questo caso, il nostro processo ha altre cose che deve fare. Vogliamo solo raccogliere lo stato di un processo morto se ce ne sono. Ecco a cosa serve WNOHANG. Impedisce il blocco di wait()/waitpid() in modo che il processo possa continuare con altre attività. Se un bambino muore, il suo pid sarà restituito da wait()/waitpid() e il tuo processo può agire in tal senso. Se nulla è morto, il pid restituito è 0.
Caso 2: supponiamo che il processo padre, invece, desideri fare nulla mentre i bambini sono in esecuzione. Non vuoi semplicemente fare un po 'di thumb-twidling for-loop, quindi usi un normale wait()/waitpid() senza WNOHANG. Il tuo processo viene estratto dalla coda di esecuzione fino a quando uno dei bambini muore. Ma cosa succede se uno dei tuoi figli è fermato tramite un SIGSTOP? Il tuo bambino non lavora più sull'attività a cui l'hai impostato, ma il genitore sta ancora aspettando. Quindi, in un certo senso, hai un punto morto, a meno che il bambino non venga continuato in qualche modo esterno al genitore e al bambino. WUNTRACED consente al genitore di essere restituito da wait()/waitpid() se un figlio diventa interrotto oltre a uscire o essere ucciso. In questo modo, il tuo genitore ha la possibilità di inviarlo a SIGCONT per continuare, ucciderlo, assegnare le sue attività a un altro bambino, qualunque sia.
pid = -1 significa attendere * qualsiasi * bambino, non tutti. E "wait" è un termine tecnico, che si riferisce a "wait (2)". – melpomene
@melpomene Ah, sì, tutti sono molto diversi. Grazie per la correzione. Diciamo che ho 3 figli ... come fa il computer a determinare quale aspettare? O è un primo tipo di cosa in cui, se uno dei bambini finisce, il computer ha tecnicamente aspettato e si è mosso? – 8this
@ 8questo Se passi un pid di '-1', non aspetta che finiscano tutti * i bambini *, aspetta che * qualsiasi * bambino finisca. Una volta che un bambino ha finito, viene raccolto. – fuz