Закрыл SSH-сессию — и долгий процесс упал вместе с ней, получив SIGHUP. nohup, disown и setsid решают эту проблему по-разному: один игнорирует сигнал заранее, другой отвязывает уже запущенный процесс от shell, третий сразу создаёт для процесса отдельную сессию.
Заранее защитить процесс от SIGHUP:
nohup ./long-task.sh &
Если процесс уже запущен в фоне текущего шелла:
disown -h %1
Полная изоляция — без управляющего терминала с самого начала:
setsid ./long-task.sh < /dev/null &> /tmp/task.log &
setsid создаёт новую сессию, поэтому даже disown не нужен — процесс изначально не привязан к терминалу. Это то, что systemd и tmux используют под капотом для демонизации.
#linux #bash #ssh
