Sto cercando di imparare la programmazione UNIX e mi sono imbattuto in una domanda riguardante fork (). Capisco che fork () crea un processo identico al processo attualmente in esecuzione, ma da dove inizia? Ad esempio, se ho il codice
int main (int argc, char **argv)
{
int retval;
printf ("This is most definitely the parent process\n");
fflush (stdout);
retval = fork ();
printf ("Which process printed this?\n");
return (EXIT_SUCCESS);
}
L'output è:
Questo è sicuramente il processo genitore
Quale processo ha stampato questo?
Quale processo ha stampato questo?
Ho pensato che fork()
crea uno stesso processo, quindi inizialmente quello in quel programma, la fork()
chiamata sarebbe stata chiamata in modo ricorsivo per sempre. Immagino che il nuovo processo creato da fork()
inizi dopo la fork()
chiamata?
Se aggiungo il seguente codice, per distinguere tra un processo padre e figlio,
if (child_pid = fork ()) printf ("This is the parent, child pid is %d\n", child_pid);
else printf ("This is the child, pid is %d\n",getpid ());
dopo la chiamata fork (), da dove inizia l'esecuzione del processo figlio?
man fork
è abbastanza sicuro per rispondere alla tua domanda, a proposito