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 forkz pewnością odpowie na twoje pytanie, btw