Нохуп против Нохупа - PullRequest
       9

Нохуп против Нохупа

0 голосов
/ 11 марта 2019

У меня проблемы с пониманием разницы между использованием nohup для запуска скрипта и использованием nohup и '&'.Я понимаю, что для последнего, если я хочу убить его, я могу просто убить идентификатор процесса.Но для первого, могу ли я просто нажать «CTRL + C», чтобы убить скрипт.Поэтому, если бы я запустил приведенную ниже команду

nohup sh script.sh

, а затем вышел из нее, нажав "CTRL + C", будет ли этот сценарий все ещебегать или нет?

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Было бы лучше, если бы вы поняли, что происходит.

nohup устанавливает процесс игнорирования сигнала HUP. Это все. Ни больше ни меньше. Когда процесс получает сигнал HUP? Обычно, когда терминал выходит из системы. И действие по умолчанию для сигнала HUP - прекратить.

hitting "CTRL+C" просто посылает INT сигнал процессу. Действие по умолчанию (и вы можете trap "echo something" INT также переопределить его) - завершить процесс.

Таким образом, nohup sh script.sh при получении сигнала INT завершится (при условии, что script.sh специально не обрабатывал сигнал INT), поскольку он не настроил настраиваемое действие при получении сигнала INT. Он также завершится при получении сигнала HUP.

&, помещенный после команды, запускает ее в фоновом режиме. Как отдельный процесс. Так что sh script.sh & работает sh в фоновом режиме. Процесс все равно прекратится, если вы отправите ему сигнал INT, просто CTRL+C не отправит его этому процессу. Вы можете отправить его, используя команду kill. И команда все равно прекратит работу, когда терминал существует, т.е. когда процесс получает сигнал HUP.

Таким образом, выполнение nohup sh script.sh & будет запускать процесс в фоновом режиме и игнорировать сигнал, который отправляется, когда терминал существует. Но все равно он прекратит работу при получении сигнала INT. Простое нажатие CTRL+C в терминале не отправит его этому процессу, так как оболочка отправляет сигнал термина процессу переднего плана, а не фону.

0 голосов
/ 11 марта 2019

Да.Преимущество & заключается в том, что вам не нужно нажимать Ctrl + C. Например, https://www.computerhope.com/unix/unohup.htm

...