Quando si utilizza fork() e si chiama exec su un figlio, il nuovo processo creato da exec è ancora un bambino giusto?
Quando si chiama exec sul bambino il nuovo processo viene gestito dal bambino. Il processo del bambino viene sostituito dalla chiamata exec.
L'uccisione del processo padre uccide anche il bambino?
È possibile che il processo figlio muoia quando il processo padre muore (almeno in Linux) facendo sì che il sistema operativo invii un segnale, ma altrimenti sopravvive.
lui chiama attesa/waitpid perché se il processo padre termina prima, il processo figlio muore e poi si ottiene parziale o nessuna uscita per il comando ls , è corretto?
Che ci si vuole attendere che il processo figlio (come nell'esempio si indicò) in modo che: a) si può terminare correttamente il processo figlio quando hai finito b) il processo figlio ha accesso a tutti le risorse del genitore ... significa che se il tuo bambino ha un handle di file aperto dal genitore e il genitore esce, ma il bambino presuppone che il file sarà aperto fino a quando è in esecuzione, accadrà cose cattive.
Date un'occhiata a questo rapido esempio: primo luogo, guardare l'output di un elenco processo:
[email protected]:~> ps
PID TTY TIME CMD
18577 pts/2 00:00:00 bash
18643 pts/2 00:00:00 ps
Poi gestiscono questo piccolo programma:
void main()
{
if(fork()){
printf("parent print");
}
else
while(1);
printf("done");
}
Qui avrete la genitore stampa il messaggio "genitore" quindi "fatto". Controllare un elenco "ps" quando è fatto e vedrete un nuovo processo nella struttura di appendere fuori:
[email protected]:~> ps
PID TTY TIME CMD
18577 pts/2 00:00:00 bash
18673 pts/2 00:00:02 a.out
18678 pts/2 00:00:00 ps
Questo a.out è il bambino, seduto per sempre nel ciclo while, mentre il genitore terminato.
ah, stavo pensando a HUP. –