У меня есть этот код в процессе системного программирования, который я выполняю:
/* La fonction create_process duplique le processus appelant et retourne
le PID du processus fils ainsi créé */
pid_t create_process(void)
{
/* On crée une nouvelle valeur de type pid_t */
pid_t pid;
/* On fork() tant que l'erreur est EAGAIN */
do {
pid = fork();
} while ((pid == -1) && (errno == EAGAIN));
/* On retourne le PID du processus ainsi créé */
return pid;
}
/* La fonction child_process effectue les actions du processus fils */
void child_process(void)
{
printf(" We are in the son's process !\n"
" son's pid is est %d.\n"
" son's PPID is %d.\n", (int) getpid(), (int) getppid());
}
/* La fonction father_process effectue les actions du processus père */
void father_process(int child_pid)
{
printf(" We are in the father process !\n"
" son's PID is %d.\n"
" father's PID is %d.\n", (int) child_pid, (int) getpid());
}
int main(void)
{
pid_t pid = create_process();
switch (pid) {
/* Si on a une erreur irrémédiable (ENOMEM dans notre cas) */
case -1:
perror("fork");
return EXIT_FAILURE;
break;
/* Si on est dans le fils */
case 0:
child_process();
break;
/* Si on est dans le père */
default:
father_process(pid);
break;
}
return EXIT_SUCCESS;
}
Вывод функции:
Мы находимся в процессе отца!PID сына 6246. PID отца 6245. Мы в процессе сына!PID сына - 6246. PPID сына - 1.
Я не понимаю, почему этот код выдает такой вывод: функция create_process разветвляет новый процесс у родителя.Итак, в родительском процессе функция create_process возвращает pid child_process, и я понимаю первую часть:
We are in the father's process!
son's PID is 6246.
father's PID is 6245.
Затем я предполагаю, что child_process выполняется, а функция create_process возвращает 0, потому что мы сейчас в child_process, и ятакже понимаю следующий вывод:
We are in the son's process!
son's PID is 6246.
son's PPID is 1.
Но я не понимаю, почему после этого выполнение прекращается ... мы все еще разветвляем дочерний процесс, верно?Поэтому я чувствую, что следует продолжать создавать новые процессы и печатать:
We are in the son's process !
son's PID is OTHER.
son's PPID is 6246.
Может кто-нибудь объяснить мне, почему этот код не продолжает создавать процессы