Próbuję nauczyć się programowania w systemie UNIX i napotkałem pytanie dotyczące fork (). Rozumiem, że fork () tworzy identyczny proces aktualnie uruchomionego procesu, ale od czego się zaczyna? Na przykład, jeśli mam kod
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);
}
Dane wyjściowe to:
Jest to zdecydowanie proces nadrzędny.
Który proces to wydrukował?
Który proces to wydrukował?
Myślałem, że fork()
tworzy ten sam proces, więc początkowo w tym programie fork()
wywołanie będzie rekurencyjnie wywoływane na zawsze. Wydaje mi się, że nowy proces utworzony od fork()
zaczyna się po fork()
połączeniu?
Jeśli dodam następujący kod, aby rozróżnić proces nadrzędny i podrzędny,
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 ());
gdzie po wywołaniu fork () proces potomny rozpoczyna wykonywanie?
man fork
z pewnością odpowie na twoje pytanie, btw