Когда pid2[k]
равен 0 для любого k, это внук.
Так что это только дочерний элемент первого уровня, когда все pid2 положительны:
/* correct code */
if (pid2[0] > 0 && pid2[1] > 0 && pid2[2] > 0){
printf("I am a child with 3 children\n");
}
else{
printf("Child of child [pid: %d, ppid: %d]\n",getpid(),getppid());
}
То, что вы написали, произойдет только один раз для каждого ребенка первого уровня: первый внук k=0
будет иметь pid2[0]==0
и не будет обновлять pid2[1]
и pid2[2]
, они могут быть случайными или 0, в зависимости от вашего компилятор.
У других внуков будет пид их старшего брата в pid2[0]
.
/* incorrect code with additional printf */
if (pid2[0] == 0 && pid2[1] == 0 && pid2[2] == 0){
printf("I am one of the oldest children\n");
}
else {
printf("Child or Younger Child of child [pid: %d, ppid: %d]\n",getpid(),getppid());
}
Теперь вы должны также обрабатывать ситуации, когда fork()
не срабатывает (pid< 0
).