TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #333 11.3K
Без скрипта не выловишь и рыбку из пруда

你好! Познакомился вчера на созвоне с китайцем, зовут его что-то вроде АнХуй. Смешной персонаж. Что-то мне 40 минут втирал на сломанном английском. Я ни слова не понял, но уверено махал головой как обезьяна на бананы. 🅰️

По итогу встречи я выучил слова «Нихао» и «Херанука», а он всяко выучил — «ты, заебал» и «пиздец». Вот так и работаем. Айти объединяет.

Ну чо, поехали двигать пингвинов

Сегодня изучаем — setsid

Эта такая штука… короче с помощью нее можно запускать команды и скрипты в новых сеансах и группах процессов. Скрипт запущенный через setsid будет независим от родительского процесса.

Это гарантирует, что если родительский процесс получит сигнал SIGHUP, то запущенный скрипт через setsid продолжит работу. Nohup? Почти.. Поехали в практику.

Пишем башник bashdays.sh

#!/bin/bash

echo "Starting..."
sleep 200
echo "Finished..."


✔️ Скрипт будет нихуя не делать 200 секунд.

Запускаем:

setsid ./bashdays.sh


Сразу видим, что оболочка продолжила работать в интерактивном режиме. Можно вводить команды и продолжать работу. А что со скриптом bashdays.sh? Давай запустим pstree и визуально глянем.

Это скрипт запущен через setsid

 ├─sshd─bash
├─sshd─bash─pstree
└─sshd─sshd
├─bashdays.sh─sleep


Видишь, он не является частью процессов bash, а работает самостоятельно, в общем дереве процессов. Запущенный скрипт не привязан к текущему терминалу.

А это скрипт bashdays.sh запущен напрямую, без setsid

├─sshd─bash
├─sshd─bash─bashdays.sh─sleep


Видим цепочку, скрипт работает в текущей оболочке bash. Если закрыть оболочку, то и скрипт прекратит свою работу.

Давай сравним setsid и nohup

Если запустить так:

nohup ./bashdays.sh &


Наблюдаем такую картину:

├─sshd─┬─sshd─bash─pstree
├─sshd─bash─bashdays.sh─sleep


Пишем exit и видим уже такое:

├─sshd─sshd─bash─pstree
├─bashdays.sh─sleep


Процесс отделился от закрытой оболочки и попал в корень всех процессов. В данный момент он продолжает работу.

Теперь запускаем setsid ./bashdays.sh

├─sshd─┬─sshd───bash───pstree
└─sshd───bash
├─bashdays.sh─sleep


А тут сразу процесс отделился от оболочки и стал корневым. Даже если написать exit и закрыть терминал, sleep продолжит работу.

Хм. Не велика разница. Но она все же есть. Команда setsid более прямой способ создания нового сеанса, тогда как nohup просто игнорирует сигнал SIGHUP.

Изучай.

tags: #bash #linux

@BАSHDАYS | BАSHDАYS.CОM
More from @bashdays
  1. Sep 30, 2026↗️ Для всех, кто строит 15 октября Cloud․ru соберет инженеров, которые строят и эксплуатир…
  2. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  3. Sep 24, 2026Post #1565
  4. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →