Странное поведение процесса в виртуализированном Ubuntu

Я выяснил, в чем проблема. На основе @L. Леврел, я добавил оператор echo в .zshrc, так как он сказал, что оболочки входа в ssh являются интерактивными и одновременно входящими в систему. И, конечно же, .zshrc получает источник ПОСЛЕ .zprofile, а путь перезаписывается в .zshrc. Перемещение команды экспорта для переменной Java в ~ / .zshrc решило проблему.

1
19.04.2015, 14:09
2 ответа

Если вы не используете wait(), родительский процесс может завершиться до того, как дочерний получит шанс запуститься. К тому времени, когда дочерний процесс вызовет getppid(), родительский завершится, поэтому дочерний будет принят init. В обычной реализации Unix, PID init равен 1, поэтому вы ожидаете, что он скажет мой родитель - процесс 1, когда это произойдет. Но, по-видимому, VirtualBox меняет это.

Если вы используете wait(), это заставляет родителя ждать завершения дочернего процесса перед выходом. Таким образом, ребенок никогда не станет сиротой.

1
29.04.2021, 00:29

Я протестировал это на двух виртуальных боксах, оба используют 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 можно найти здесь.

2
29.04.2021, 00:29

Теги

Похожие вопросы