ho bisogno di essere in grado di:Linux, waitpid, WNOHANG e zombie
- fork di un processo e renderlo execvp (che ho fatto)
- di controllo se l'execvp processo figlio ha avuto successo (non sapere come)
- di controllo se il processo figlio terminato (che hanno problemi)
sto biforcano un processo e non ho alcun modo per verificare se i execvp del bambino ha lavorato o meno. Se ha fallito, devo essere in grado di sapere che ha fallito. Attualmente sto usando
-1 != waitpid(pid, &status, WNOHANG)
Ma sembra che se l'execv del processo pid fallisce il waitpid non restituisce -1.
Come posso verificarlo? Ho letto la pagina man waitpid, ma non è chiaro per me; forse il mio inglese non è abbastanza buono.
MODIFICA: per ulteriori informazioni:
Sto costruendo il mio terminale per un lavoro a domicilio. Ho bisogno di ottenere come input una stringa di comando, diciamo "ls" e quindi devo eseguire il comando.
Dopo il child fork, il figlio richiama execvp per eseguire il comando (dopo aver analizzato la stringa) e il genitore deve verificare se c'è un '&' alla fine del comando o meno.
se il segno "&" non esiste alla fine del comando, il genitore deve attendere l'esecuzione del figlio.
quindi ho bisogno di sapere se il execvp non è riuscito. Se non ha fallito, il genitore usa waitpid per aspettare che il bambino finisca l'esecuzione. Se fallisce, il genitore non aspetterà il bambino.
titolo di domanda migliore di sempre. – valentinas
Ci sono un paio di fattori che potrebbero influenzare la tua soluzione qui: in cosa stai eseguendo il tuo processo? Hai la possibilità di modificare _that_? Va bene non sapere se l'execvp ha avuto esito negativo fino a quando il bambino non è uscito? Se pubblichi una dichiarazione del problema più dettagliata, potremmo essere in grado di dare un consiglio migliore. – FrankieTheKneeMan
Non puoi inviare un segnale dal bambino al genitore in caso di detto fallimento? –