LINUX.ORG.RU

Уточнение по утилите nohup

 


0

1

В описании сказано:

UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (SIGHUP). Таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы.

Что значит «команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы»?

Данная утилита пропишет указанный ей скрипт в автозагрузку, и после перезагрузки или при включении компьютера он (скрипт) будет запускаться после загрузки ОС?

★★★★★

Что значит

В переводе на современный это значит, что «когда закроешь эмулятор терминала».

после перезагрузки

Нет конечно. Имеется в виду сессия работы с терминалом.

no-such-file ★★★★★
()

Нет. Обычно процесс в Unix прекращает работать, если прекратил работать его родительский процесс. То есть обычно когда пользователь выходит из системы, все процессы, что являются потомками его сессии, останавливаются. Но если их запустить с nohup, то на них это правило не действует. Естественно, это не имеет отношения к автозагрузке и при выключении такой независимый процесс все равно будет остановлен.

Vsevolod-linuxoid ★★★★★
()

Наиболее типичный случай: ты заходишь в систему по ssh и запускаешь фоновый процесс через nohup, после чего выходишь и процесс продолжает работать, а не убивается SIGHUP’ом.

То же самое работает и с локальным входом через TTY, но этим редко пользуются

annulen ★★★★★
()
Ответ на: комментарий от no-such-file

когда закроешь эмулятор терминала

Если закрывать эмулятор терминала, то перед этим надо еще disown процессу сделать. Хотя гораздо проще его не закрывать, он что, мешает кому-то

annulen ★★★★★
()

Что значит «команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы»?

Когда ты закрываешь терминал ядро должно послать дочерним процессам сигнал HUP, процессы должны самостоятельно его отработать и завершить свою работу.

Это похоже на то как обрабатывается Ctrl+C, когда процессу посылается сигнал TERM, который можно послать явно выполнив kill -SIGTERM <pid>.

Процесс на принятый сигнал сам решает что делать. Конечно когда ты собираешь helloworld то компиллер добавит дефолтные обработчики по стандарту. Но ничего не мешает сделать свой кастомный обработчик. Например сервисы/демоны на сигнал HUP просто обновляют свою конфигурацию, т.е. ты обновил конфиг и хочешь чтоб он применился без перезапуска процесса, то можешь послать ему сигнал: kill -SIGHUP <pid> (разумеется это работает если это было предусмотрено, для nginx работает).

Только KILL не дает выбор процессу, kill -9 <pid> или kill -SIGKILL <pid> ядро завершит процесс принудительно.

По всему выше написанному должно стать понятно что nohup просто не передает сигнал HUP дочернему процессу.

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Ясно. Только непонятно, почему в описании данной утилиты нельзя было так и сформулировать, а не использовать объяснение, допускающее неверное толкование?

Mischutka ★★★★★
() автор топика
Последнее исправление: Mischutka (всего исправлений: 2)
Ответ на: комментарий от Mischutka

Описание составлено в расчёте, что ты понимаешь как всё это устроено. Технически там всё верно написано. В частности про «после перезагрузки или при включении компьютера» там нет ни слова, это ты сам от непонимания нафантазировал.

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.