Intereting Posts
Загрузка Gentoo на LVM внутри LUKS с зашифрованным файлом gpg Попытка преобразовать сценарий инициализации RHEL6 в systemd Как пропустить первый аргумент в скрипте Debian, нет X, нет Интернета, как скомпилировать драйвер беспроводной сети? Как форматировать потоковый вывод JSON из Node.js? Как установить php-fpm для пользователя php-user вместо www-data? Как «Список дисков» в Linux HOSTAPD выходит из строя без остановки и отбрасывает клиентов Какая лучшая цепочка инструментов или единственный инструмент для преобразования NTFS в файловую систему ext ? Как загрузить подкаталог на git.gnome.org? Как настроить сетевой принтер (DE-agnostic решение) Принуждение GNU make для запуска команд в порядке Почему мой Grub не инициализирован в ботинке? Я изменил свой PATH, и теперь для каждой команды он возвращает команду «не найден» Получение электронной почты через IMAP и разбор сценария с минимальной задержкой

Подпроцессы bash / gnome-terminal не заканчиваются (CentOS / RHEL)

сегодня я заметил что-то, что, вероятно, имеет легкое объяснение, но с моей стороны было совершенно неожиданным: я запускаю CentOS (и RHEL, который ведет себя одинаково). Я открываю bash в терминале и запускаю любой подпроцесс, например gedit. Окно открывается, отлично. Когда я делаю «ps», я вижу, что gedit имеет bash, поскольку это родительский процесс, который сам имеет гном-терминал, поскольку он является родителем. Когда я остановлюсь на bash, я ожидаю, что все дочерние процессы также прекратятся. Но gedit продолжает работать, и родитель изменился на 1 (init)!

Я старался не останавливать оболочку изящно, но убить ее трудно, такой же результат. Он пытался убить терминал, а не оболочку, все тот же результат. Только когда я закрываю терминал, нажав кнопку X, gedit также закрывается.

Я не ожидал такого поведения. Начав gedit с nohup, я не удивлюсь, но даже без nohup … почему он остается в живых?

Может быть, кто-то может пролить свет и знает, что там происходит. Заранее спасибо!

Такие программы, как gedit, gvim, google-chrome и многие другие, автоматически превращаются в задний план. Это позволяет ввести

gedit /home/msw/ul-answer 

отобразите новое окно и верните приглашение оболочки. Это не плохой выбор дизайна, и обычно есть возможность переопределить его. Команды gedit -w и gvim --nofork не будут отсоединены от управляющего терминала и не вернут вам приглашение командной оболочки.

Для программы для фона, она вилки, а затем родительские выходы. Это сделает ваш обычный экземпляр gedit дочерним элементом init (PPID == 1) почти сразу после его ввода.

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

добавленная странность :

Проведя немного времени, проверяя это и смотря на вывод strace и т. Д., Gedit, похоже, автоматически не основывается на себе. То, что я сказал о gvim, все еще держится, и это было время, проведенное во сне, поэтому я оставлю это сейчас.

Когда вы закрываете окно терминала, ядро ​​посылает сигнал SIGHUP в bash. Затем Bash отправляет SIGHUP на каждое задание, поэтому он убивает gedit с помощью SIGHUP.

Когда вы выходите из bash, набрав exit или Ctrl + D или убив его с помощью SIGKILL, эмулятор терминала замечает, что его дочерний процесс завершил и закрыл окно. Гедит не пострадал.