Было бы лучше, если бы вы поняли, что происходит.
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
в терминале не отправит его этому процессу, так как оболочка отправляет сигнал термина процессу переднего плана, а не фону.