setsid
: как действительно отделить процесс от SSH-сессииnohup часто используют, чтобы процесс пережил закрытие терминала:
nohup ./backup.sh &
Но nohup в основном защищает от SIGHUP. Сам процесс всё ещё может оставаться связанным с текущей session.
Для полного создания новой сессии существует setsid.
▪️Что происходит обычноПосле подключения по SSH можно посмотреть:
ps -o pid,ppid,sid,tty,cmd
У процессов будут общие SID и управляющий терминал.
При закрытии SSH это может иметь значение для поведения процессов.
▪️Запуск через setsid
setsid ./backup.sh
Процесс становится лидером новой session и получает новый SID.
Проверить:
ps -o pid,ppid,sid,tty,cmd -C backup.sh
Можно увидеть, что SID процесса больше не связан с вашей SSH-сессией.
▪️Почему одного &
недостаточно./backup.sh &
Фоновый процесс всё равно является частью текущей shell-сессии.
& лишь не блокирует терминал ожиданием процесса.
▪️А nohup
?nohup ./backup.sh &
Это уже лучше для сценария с закрытием терминала, но nohup и setsid решают разные задачи.
nohup изменяет обработку SIGHUP и обычно перенаправляет стандартный вывод.
setsid создаёт новую session и отделяет процесс от текущей session.
▪️КомбинацияДля простого запуска полностью отдельно:
setsid ./backup.sh >/tmp/backup.log 2>&1 < /dev/null &
Теперь процесс не зависит от стандартного ввода текущего терминала и находится в отдельной session.
▪️Где это полезно• запуск долгих задач из SSH;
• анализ поведения daemon-like процессов;
• shell-обвязки для сервисов;
• понимание PID, PPID, SID и TTY.
▪️Почему это важно&, nohup и setsid часто воспринимают как взаимозаменяемые способы “запустить в фоне”. На самом деле они меняют разные свойства процесса.
Если нужно понять, почему программа продолжает зависеть от SSH или терминала, смотреть стоит не только на PID, но и на SID, PPID и управляющий TTY.
BashTex 📱 #bash #SSH