В процессе изучения функций fork, exec, wait и т.п. протестировал следующую программу:
#include <unistd.h>
#include <stdio.h>
int main (void) {
pid_t p;
printf("Original program, pid=%d\n", getpid());
p = fork();
if (p == 0) {
printf("In child process, pid=%d, ppid=%d\n",
getpid(), getppid());
} else {
printf("In parent, pid=%d, fork returned=%d\n",
getpid(), p);
}
}
Результат следующий:
Original program, pid=2502
In parent, pid=2502, fork returned=2503
In child process, pid=2503, ppid=1
То есть ppid процесса-потомка равен 1, а не 2502, как по идее должно быть. pid=1 имеет процесс init, который загружается вместе с системой. Ubuntu 11.10 установлена под VirtualBox, так же пробовал в Ubuntu 13.10 на VmWare результат примерно такой же, процессом-родителем также является init, только pid другой. Попробовал на компьютере, где Ubuntu установлена без виртуалки и получил верные результаты, то есть ppid = 2502. Хотелось бы как-нибудь решить эту проблему потому что ставить вторую ОС нет особой необходимости. К сожалению google не подсказал решение. Спасибо.