2013-11-30 2 views
0

Когда я вызываю fork() в main.I не получает значение 0 для дочернего идентификатора процесса. Мой код:Функция Fork не возвращает значение 0?

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <sys/wait.h> 

int main(){ 


    pid_t pid = fork(); 
    printf("pid in child=%d and parent=%d\n",getpid(),getppid());  
    wait(NULL); 

} 

И выход:

pid in child=15690 and parent=11593 
pid in child=15691 and parent=15690 

Где проблема? Как я знаю, у меня должно получиться значение 0 для дочернего процесса во второй строке.

+2

Это Идентификатор возвращаемого 'fork', который будет нулевым в ребенке. У ребенка и родителя будут pids, но ребенок, по-видимому, не должен знать его. –

ответ

4

Вы должны фактически использовать значение pid в своем заявлении printf.

Результат fork() равен нулю для разветвленного процесса, но его идентификатор процесса, полученный на getpid(), не равен нулю.

1

$ человек GETPID

GETPID() возвращает идентификатор процесса вызывающего процесса.

$ человек вилка

ВОЗВРАТ СТОИМОСТИ
В случае успеха, PID дочернего процесса возвращается в родительском, и 0 возвращается в дочернем.

Что вы печатаете реален PID, как в команде пса

Смежные вопросы