Unix Fork Понимание - PullRequest
       12

Unix Fork Понимание

2 голосов
/ 14 октября 2011

Я изучаю процесс разветвления и пытаюсь код листинга 3:

sunbox$ cat fork2.c
#include <unistd.h>
#include <stdio.h>

int main (void) {

        pid_t p;

        printf("Original program, pid=%d\n", getpid());
        p = fork();
        if (p == 0) {
                printf("In child process, pid=%d, ppid=%d\n",
                        getpid(), getppid());
        } else {
                printf("In parent, pid=%d, fork returned=%d\n",
                        getpid(), p);
        }
}

sunbox$ gcc fork2.c -o fork2
sunbox$ ./fork2
Original program, pid=767
In child process, pid=768, ppid=767
In parent, pid=767, fork returned=768

Вывод, который я получаю:

Original program, pid=2728 
In parent, pid=2728, fork returned=2731
In child process, pid=2731, ppid=2728

Принимая во внимание, что образец страницы показывает вывод потомка потом, а потом родителя?Я не понимаю этого.

Кроме того, когда я запускаю код в своей лаборатории, я получаю вывод, как показано на странице.Большое спасибо за то, что не смогли ответить на этот наивный вопрос.

Если это имеет значение, я использую Ubuntu 11.04.

1 Ответ

6 голосов
/ 14 октября 2011

После системного вызова fork () это зависит от планировщика ОС, процесс которого продолжается первым. Возможно, что повторные запуски этой же программы приведут к различным заказам.

Это называется недетерминизм .

...