Size: a a a

2020 October 16

️ ️️ in pro.bash
тааак

ну в вайле сабшел
но он то пишет в несуществующий фд и с ним все ок
источник

аᶘ

асоциальный пикотран... in pro.bash
️ ️️
ну так в итоге то оно не умирает или как?
1. Запускается терминал, в нём запускается bash. Если терминал закрыть сразу, то терминал отправит SIGHUP bash'у и умрут оба процесса (терминал и баш) и pts.

2. Если после открытия терминала и bash'а создать бэкграунд процесс без вывода в stdout/stderr и закрыть терминал, то SIGHUP отправится bash'у, а bash, в зависимости от huponexit либо отправит SIGHUP своему child-процессу, либо не отправит. Если отправит и у child'а нет защиты от SIGHUP, то он по дефолту умрёт. Если отправит и защита есть или не отправит — процесс уйдёт к pid 1.

3. Если после открытия терминала и bash'а создать бэкграунд-процесс, который пишет в stdout, то умрёт процесс в том случае, если напишет после того, как pts умрёт, а всё остальное поведение как в пункте 2.
источник

️ ️️ in pro.bash
запускаю st -e bash в нем:
while :; do echo 1; sleep 1; done & disown && exit

и он пишет в закрытый фд
источник
2020 October 17

️ ️️ in pro.bash
это же тоже самое что и
echo 1488 > /non/existing/path

почему процесс умирать то должен
источник

аᶘ

асоциальный пикотран... in pro.bash
️ ️️
это же тоже самое что и
echo 1488 > /non/existing/path

почему процесс умирать то должен
Ну, например, если ты создашь пайп из двух команд и убьёшь правую часть, то левая часть умрёт при попытке написать что-либо, потому что пайп между ними умрёт.
источник

️ ️️ in pro.bash
почему тут не умирает
источник

аᶘ

асоциальный пикотран... in pro.bash
️ ️️
почему тут не умирает
хз, я тоже это воспроизвожу
источник

аᶘ

асоциальный пикотран... in pro.bash
и без disown'а
источник

️ ️️ in pro.bash
ну в posix sh & хватает
источник

️ ️️ in pro.bash
потому что разные типы
источник

аᶘ

асоциальный пикотран... in pro.bash
️ ️️
ну в posix sh & хватает
Да понятно, что пайп не char device.
источник

аᶘ

асоциальный пикотран... in pro.bash
Но вот на виртуалке у меня это уже не воспроизводится
источник

️ ️️ in pro.bash
вот так умирает
(while :; do echo 1; sleep 1; done) | sleep 5
источник

аᶘ

асоциальный пикотран... in pro.bash
чо-то я вообще запутался
источник

️ ️️ in pro.bash
там где хочет написать в несуществующий пайп - умирает

а там где хочет написать в несуществующий файл - ошибка записи у того кто пишет (тут у echo ексит код 1)
источник

аᶘ

асоциальный пикотран... in pro.bash
️ ️️
там где хочет написать в несуществующий пайп - умирает

а там где хочет написать в несуществующий файл - ошибка записи у того кто пишет (тут у echo ексит код 1)
так про это и была речь на самом деле
источник

аᶘ

асоциальный пикотран... in pro.bash
действительно, баш-то внутри не умирает, while крутится и перезапускает echo.
источник

️ ️️ in pro.bash
это же не совсем то 🤔
источник

аᶘ

асоциальный пикотран... in pro.bash
️ ️️
запускаю st -e bash в нем:
while :; do echo 1; sleep 1; done & disown && exit

и он пишет в закрытый фд
Он не пишет в закрытый фд, это ты показал файловые дескрипторы какого процесса?
источник

аᶘ

асоциальный пикотран... in pro.bash
️ ️️
это же не совсем то 🤔
Понятно, что у shell'а, который в while запускает echo, /dev/fd/{0,1,2} смотрят на несуществующий pts*. Но этот shell ничего не пишет в них, соответственно и не умирает. Если бы шелл что-то написал, то умирал бы и процесс шелла.

Ну а если ты запустишь процесс nc -ulp 1234 в бэкграунде, закроешь шелл, а потом попытаешься сделать echo 1 | nc -u localhost 1234, то nc умрёт при попытке написать в несуществующий pts.
источник