Итак, у меня есть пара вопросов о fork ():
1) Я почти уверен, что разветвление позволяет нескольким потокам обращаться к общему адресному пространству, что делает его очень дешевым для системы. Я также почти уверен, что каждому процессу выделяется место в стеке. Кроме того, я не верю, что вызов fork () создал новый образ процесса (насколько я знаю, который создается с помощью exec ()) Прав ли я в этих утверждениях?
2) Теперь о невероятно сложном вопросе: вызывает ли вызов fork () процесс, равносильный многопоточности? Например, если вы используете fork () для родительского процесса, есть ли у родительского и дочернего процесса собственный поток?
3) если fork () копирует родительский процесс, как ребенок узнает, когда прекратить разветвление? Т.е. у вас есть следующий простой код:
#include
int glob=6;
char buf[]="a write to stdout\n";
main()
{
int var;
int pid;
var=88;
printf("Before Fork\n");
if((pid=fork())<0)
printf("fork Error\n");
else if(pid==0)
{
glob++;
var++;
}
else
printf("\nPID= %d ,GLOB = %d,VAR = %d\n",getpid(),glob,var);
exit(0);
}
(src http://allprograms -c.blogspot.com / 2010/01 / simple-fork-program-in-linuxunix-c.html )
Что мешает ребенку разветвляться снова и снова и снова? Останавливается ли дочерний процесс при вызове fork (), а затем команда fork () возвращает PID дочернего процесса родителю?
В связанной заметке, как бы вы создали процесс, чьи потомки продолжают разворачиваться?
Любая помощь будет принята с благодарностью, и большое спасибо.