вопрос обычно звучит примерно так
я открываю у себя терминал
по ssh конекчусь к серверу и запускаю там скрипт
потом интернет соединение между мной и сервером рвется
что произойдет со скриптом запущенным на удаленной машине? и почему это произойдет?
при закрытии консоли, в консоль отправляется сигнал SIGHUP, который вызывает ее завершение.
Следовательно вам нужно либо блокировать этот сигнал командой nohup, либо писать свою программу, где вы будете этот сигнал перехватывать сами, либо пользоваться экранными менеджерами (screen/tmux)
консоль закрывается где? у меня на машине? почему она закрывается?
Я ж не говорил что она закрывается, я вообще откинувшись сижу втыкаю в монитор, консоль не трогаю
просто связь теряется с удаленной машиной
даже если я сам закрою свою консоль у себя
как оно может куда-то какой-то сигнал послать если соединения между моей машиной и сервером нет?
Не сетевой сигнал, это сигнал который отправляется процессу другим процессом (например ядром системы, или службой SSHD)
SIGHUP это сигнал, имя которого взято еще с телефонных подключений. Сокращенно от HangUp - повесить трубку на телефоне.
Вы подключены к серверу, для вас на этом сервере запущен процесс (bash, например). Если связь теряется, этому процессу отправляется сигнал SIGHUP. Это не сетевой сигнал это сигнал непосредственно самому процессу.
Bash его соответственно передает всем процессам которые в нем запущены (фоновые или foreground), и они все соответственно завершаются.
вариантов много:
- запускать в screen;
- запускать в tmux;
- запускать через nohup и смотреть вывод в создаваемом им файле;
- запускать через systemd;
- ...