setsid: как действительно отделить процесс от SSH-сессииnohup часто используют, чтобы процесс пережил закрытие терминала:nohup ./backup.sh &Но
nohup в основном защищает от SIGHUP. Сам процесс всё ещё может оставаться связанным с текущей session.Для полного создания новой сессии существует
setsid.▪️Что происходит обычно
После подключения по SSH можно посмотреть:
ps -o pid,ppid,sid,tty,cmd
У процессов будут общие
SID и управляющий терминал.При закрытии SSH это может иметь значение для поведения процессов.
▪️Запуск через
setsidsetsid ./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