Я выяснил, в чем проблема. На основе @L. Леврел, я добавил оператор echo в .zshrc, так как он сказал, что оболочки входа в ssh являются интерактивными и одновременно входящими в систему. И, конечно же, .zshrc получает источник ПОСЛЕ .zprofile, а путь перезаписывается в .zshrc. Перемещение команды экспорта для переменной Java в ~ / .zshrc решило проблему.
Если вы не используете wait()
, родительский процесс может завершиться до того, как дочерний получит шанс запуститься. К тому времени, когда дочерний процесс вызовет getppid()
, родительский завершится, поэтому дочерний будет принят init
. В обычной реализации Unix, PID init
равен 1, поэтому вы ожидаете, что он скажет мой родитель - процесс 1, когда это произойдет. Но, по-видимому, VirtualBox меняет это.
Если вы используете wait()
, это заставляет родителя ждать завершения дочернего процесса перед выходом. Таким образом, ребенок никогда не станет сиротой.
Я протестировал это на двух виртуальных боксах, оба используют OS X в качестве хоста и назначают только 1 CPU для каждого клиента.
1 Ubuntu 14.04.2
В этой установке, в среде окна X, поведение соответствовало OP
john@U64D:~$ ./a
I'm the parent, my PID is 2682, my parent is process 2632
This sentence has been printed by process: 2682 my parent is process 2632
john@U64D:~$ This sentence has been printed by process: 2683 my parent is process 1673
Родительский процесс 1673 останется тем же, пока я не выйду из системы и не войду снова
john@U64D:~$ ./a
I'm the parent, my PID is 3787, my parent is process 3740
This sentence has been printed by process: 3787 my parent is process 3740
john@U64D:~$ This sentence has been printed by process: 3788 my parent is process 3107
./a
I'm the parent, my PID is 3790, my parent is process 3740
This sentence has been printed by process: 3790 my parent is process 3740
john@U64D:~$ This sentence has been printed by process: 3791 my parent is process 3107
3107 - init --user
john@U64D:~$ ps -ef|grep 3107
john 3107 2911 0 15:07 ? 00:00:00 init --user
Однако, результат будет соответствовать ответу Barmar в среде не X (например, tty1).
2 Debian 7.8
Эта установка совпала с ответом Barmar, как для X, так и для не X окружения.
john@debian:~$ ./a
I'm the parent, my PID is 3455, my parent is process 3406
This sentence has been printed by process: 3455 my parent is process 3406
john@debian:~$ This sentence has been printed by process: 3456 my parent is process 1
Заключение
Наблюдение OP является результатом того, что Ubuntu использует session init для X-окружения по умолчанию. Подробную информацию о session init можно найти здесь.