Considerando il codice qui sotto:valore restituito sistema vfork() call
int main()
{
int pid;
pid=vfork();
if(pid==0)
printf("child\n");
else
printf("parent\n");
return 0;
}
In caso di vfork() lo spazio indirizzo utilizzato da processo padre e processo figlio è stesso, così un'unica copia di variabile pid dovrebbe essere lì Ora non capisco come questa variabile pid possa avere due valori restituiti da vfork() cioè zero per figlio e non zero per genitore?
In caso di fork() lo spazio indirizzo viene anche copiato e ci sono due copia di variabili pid in ogni bambino e genitore, così posso capire in questo caso due copie diverse possono avere valori diversi restituito da forcella() ma non è possibile capire in caso di vfork() in che modo pid restituisce due valori da vfork()?
Questo è letale - puoi 'exec()' o '_exit()' nel ['vfork()'] (http://pubs.opengroup.org/onlinepubs/009695399/toc.htm) 'd bambino ma questo è tutto. Praticamente qualsiasi altra cosa porta a comportamenti indefiniti. Raccomandazione: non usare ['vfork()'] (http://pubs.opengroup.org/onlinepubs/007908799/xsh/vfork.html); anzi, non mi preoccuperei nemmeno di imparare come usarlo in sicurezza. È come 'gets()', una funzione che è meglio fingere che non esista. –
@JonathanLeffler: 'vfork()' è abbastanza utile per i sistemi senza MMU. – ninjalj
Sì signore, sono d'accordo con voi non dovremmo usarlo, ma stavo usando vfork per risolvere un problema di creazione dell'albero del processo e della comunicazione tra i processi di diversi livelli di albero, in quel caso vfork era utile prendendo alcune variabili globali. Terrò un tuo consiglio. –