Рейтинг:3

Выход из терминала и закрытие терминала

флаг br

Контекст: -

Я запускаю процесс в bash с & добавлено, т.е. в фоновом режиме. Процесс имеет пока(1) то есть он будет работать вечно. Мой bash является родительским, а мой процесс становится дочерним. Я хочу узнать, как ядро ​​​​обрабатывает дочерний элемент, когда родитель завершается.

Наблюдения: -

  1. Если я выйду из терминала (используя выход команда с терминала), /lib/systemd/systemd --пользователь становится родительским процессом дочернего
  2. Если я убью процесс терминала (используя убийство) с другого терминала, тот же результат, что и выше
  3. Если я закрываю терминал с помощью значка крестика, дочерний процесс также завершается

Вопрос:-

Чем закрытие отличается от убийства/выхода?

sudodus avatar
флаг jp
Какую версию (20.04.x ​​LTS?) и какую версию (Ubuntu Desktop, Kubuntu, Lubuntu... Xubuntu?) вы используете? Какой эмулятор терминала вы используете (терминал gnome или ...?) Какой это дочерний процесс (это скомпилированная программа, сценарий оболочки ...; он работает в своем собственном окне, в фоновом режиме или в исходном терминале) окно)?
Saad Abdul Majid avatar
флаг br
@sudodus, моя ошибка из-за отсутствия информации. Здесь: Ubuntu Desktop, 18.04.5 LTS, gnome-терминал, скомпилированная программа, работающая в окне терминала
Рейтинг:1
флаг us
shk

В Linux есть разные виды сигналов. Когда ты выход терминал, отправленный сигнал отличается от сигнала, который отправляется, когда вы закрываете терминал, нажав на Икс. Попробуйте пройти сигналы завершения чтобы узнать, чем закрытие и выход из терминала отличаются друг от друга.

Zanna avatar
флаг kr
Я прошел через это, и я до сих пор не знаю, какой сигнал отправляется, когда мы закрываем окно эмулятора терминала, или какой сигнал отправляется, когда мы набираем «выход» в терминале. Не могли бы вы уточнить и объяснить, какие сигналы отправляются и в чем разница между ними?
Рейтинг:0
флаг pe

Процесс запущен так ./мойпроцесс & являются дочерними элементами родителей бить процесс, открытый терминальной программой. Знак & не поможет вам закрыть окно терминала до окончания длительного процесса.

То, что вы ищете, это команда нет

user@host:~$ nohup bash -c '/path/to/myprocess'

Больше информации : http://manpages.ubuntu.com/manpages/impish/en/man1/nohup.1.html
Некоторые примеры: https://linuxhint.com/nohup_command_linux/

Saad Abdul Majid avatar
флаг br
Мне нужно только знать причину моих наблюдений. Чтобы понять, что я наблюдаю. Я думаю, что речь идет о сигнале, который отправляется процессам.
флаг pe
@Saad Abdul Majid: см. первую часть моего ответа, закрытие окна терминала убивает родительский процесс bash
Рейтинг:0
флаг jp

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

  • Когда я выход я выхожу из бить работает в окне терминала и пинг продолжает работать, но некуда писать.

  • Когда я убийство процесс, я убиваю бить процесс в окне терминала. Я не нашел явного гном-терминал процесс убить, потому что процесс /usr/lib/гном-терминал/гном-терминал-сервер управляет ими всеми. Я не уверен, что это то, что вы делали, но это то, что я предполагаю.

  • Когда я закрываю окно (кнопкой x), я выхожу из оконного процесса (что, в свою очередь, заставляет его дочерние процессы останавливаться, включая бить и пинг). Это очевидное отличие от двух предыдущих случаев.


Когда я делаю соответствующее упражнение с xterm, будет отдельный процесс с именем xterm.

  • Когда я выход я выхожу из бить работает в окне терминала и пинг продолжает работать, но некуда писать.

  • Когда я убийство процесс, я убиваю xterm процесс окна терминала (что, в свою очередь, заставляет его дочерние процессы останавливаться, включая бить и пинг).

  • Когда я закрываю окно (кнопкой x), я выхожу из оконного процесса (что, в свою очередь, заставляет его дочерние процессы останавливаться, включая бить и пинг).


Вы уже знаете, что можете использовать нет (вместе с &), если вы хотите, чтобы дочерний процесс продолжался после закрытия окна терминала, в котором был запущен дочерний процесс.


Редактировать 1: Заключительный комментарий:

От человек

Если команда завершается управляющим оператором &, оболочка выполняет команду в фоновом режиме в подоболочке. Оболочка делает не ждать завершения команды, а статус возврата равен 0.

Мы заметили, что нет сигнала для остановки подоболочки, и процесс запускается в/из этой подоболочки, когда бить завершается, по крайней мере, не при запуске в окне терминала. Но окно вызывающего терминала закрыто. Я думаю, что после выхода из bash окно терминала больше не знает о подоболочке и процессе, запущенном в/из этой подоболочки, и поэтому не может их остановить.

Редактировать 2: я попросил помощи в Unix и Linux - Пожалуйста, прочитайте ответы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.