раздвоение и пид - PullRequest
       46

раздвоение и пид

2 голосов
/ 04 июня 2011

код:

int main(void) 
{
    printf("pid: %d\n", getpid());
    pid = fork();


    if (pid < 0) {
        fprintf(stderr, "Fork Failed!");
        exit(-1);
    } else if (pid == 0) {
        execv("sum", argv);
    } else {
        printf("  pid: %d\n", pid);
        wait(NULL);
    }
}

Выход:

pid: 280
   pid: 281

Вопрос:

Почему два пид разные. Я думал, что они должны быть одинаковыми, потому что родительский элемент - это то, что выполняется в блоке else, а родительский - это то, что выполняется перед разветвлением, поэтому они должны быть одинаковыми, нет?

Ответы [ 2 ]

10 голосов
/ 04 июня 2011
RETURN VALUE
       On success, the PID of the child process is returned in the parent, 
       and 0 is returned in the child.  On failure, -1 is returned in the parent,
       no child process  is  created,  and  errno  is  set appropriately.

Итак, в родительском процессе fork () возвращает pid дочернего процесса, который был создан.

2 голосов
/ 04 июня 2011

Я не буду повторять ответ nos , так как он полностью прав.Но я хотел бы отметить, что любая программа может получить свой собственный PID с помощью системного вызова getpid.Таким образом, у вилки нет причин возвращать вам собственный PID.Вместо этого вы можете узнать PID процесса, который вы только что отменили, что может быть трудно получить, если он не был возвращен (родителю) на fork.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...