Неожиданный родительский идентификатор процесса на выходе

Мой код разворачивает процесс и печатает каждый процесс «PID и PPID». Я ожидал, что PPID у ребенка будет таким же, как у PID родителя, но он не подходит как таковой.

Я использую Ubuntu 14.04.

#include <stdio.h> #include <sys/wait.h> int main(){ int pid; pid = fork(); if(pid==0){ printf("\nI am the child and my parent id is %d and my id %d\n", getppid(), getpid()); } else printf("\nI am the parent and my pid is %d and my parent id is %d\n", getpid(), getppid()); return 0; } 

Вот результат, который я получаю:

 I am the parent and my pid is 29229 and my parent id is 27087 I am the child and my parent id is 1135 and my id is 29230 

One Solution collect form web for “Неожиданный родительский идентификатор процесса на выходе”

Я предполагаю, что родитель вернулся перед ребенком, который стал сиротой. PID 1135 должен быть вашим процессом инициализации пользователя, который стал процессом нового родителя. (в пользовательском сеансе Ubuntu есть 2 подпотребителя).

 $ ps -ef | grep init you 1135 ... init --user 

Если вы хотите, чтобы ваш родитель подождал своего ребенка, используйте wait . На самом деле у вас уже есть include :

 #include <stdio.h> #include <sys/wait.h> int main(){ int pid; pid = fork(); if(pid == 0) printf("\nI am the child and my parent id is - %d and mine id %d\n",getppid(),getpid()); else{ printf("\nI am the parent and my pid is %d and my parent id is %d\n",getpid(),getppid()); wait(NULL); } return 0; } 

Это гарантирует, что родительский элемент не будет удален до printf . Вы можете увидеть это поведение более четко, вставив несколько вызовов sleep() здесь и там, чтобы увидеть, в каком порядке происходят события.

Для получения дополнительной информации о подводных лодках, посмотрите здесь .

  • Запуск приложения под Tomcat
  • PPTP с dhcp только для клиентов
  • Недопустимые подписи при запуске обновления apt-get
  • Как тусклый экран, даже если искусственно, ниже минимума?
  • Как установить Ubuntu с USB-ключа с помощью syslinux?
  • xorg.conf XkbOption игнорируется для завершения: ctrl_alt_bksp для перезапуска X
  • проанализировать одно поле из массива JSON в массив bash
  • Как сделать ручку изменения часового пояса Ubuntu?
  • ошибка локали. не может открыть файл определения локали `fa_IR '
  • Почему при загрузке w / upstart script на Ubuntu 12.04 не запускается контейнер докеров?
  • Как найти скорость интерфейса wlan?
  • Linux и Unix - лучшая ОС в мире.