2017-01-23 5 views
1

Как определить между дочерним процессом и его дочерним элементом?Определить дочерний элемент дочернего процесса?

pid_t pid = fork(); 
if (pid == 0) // child 1 
{ 
    int pid2 = fork(); 
    if (pid2 == 0)// child of child 1 
    { .... 

Как мы можем различать ребенка 1 и его ребенка? Они оба имеют одинаковый pid 0?

+0

Я не уверен, я понимаю ваш вопрос. У внука будут как 'pid', так и' pid2' равными 0. Прямой ребенок будет иметь только «pid» 0. – StoryTeller

+0

Если 'pid2' равно нулю, то вы находитесь в« внуке », ребенке ребенка. Не имеет значения, когда или где вы называете 'fork', или насколько глубоко вы идете с количеством детей. Если 'fork' возвращает ноль, то вы находитесь в дочернем процессе процесса, который называется' fork'. –

+0

Да, но есть ли идентификаторы, которые определяют, на каком уровне мы находимся? это первый или n-й ребенок? – Bionix1441

ответ

1

fork() возвращаемое значение: 0 - in child process; PID -> дочерний PID в родительском процессе; -1 -> ошибка

Вы можете получить PID в дочернем процессе по getpid()

if (pid == 0) { 
    pid_t child_pid = getpid(); 
} 

Ваш код с некоторыми деталями:

pid_t pid = fork(); 
if (pid == 0) // child 1 
{ 
    // child process 
    pid_t p = getpid(); // Child process pid 
    int pid2 = fork(); 
    if (pid2 == 0) { 
    // child of child process 
    pid_t p = getpid(); // Child of child process pid 
    } else if (pid2 > 0) { 
    // Still child process 
    //pid2 -> child of child PID 
    } 
} else if (pid > 0) { 
    // Still main process 
    // pid -> child PID 
    pid_t p = getpid(); // Main process pid 
} 
Смежные вопросы