![]() |
Пред. тема | След. тема | ||
Форум Программирование под UNIX (Shell скрипты) | |||
---|---|---|---|
Изначальное сообщение | [ Отслеживать ] |
"Завершение дочерних процессов 2 уровня" | +/– | ![]() |
Сообщение от Аноним (0), 13-Май-20, 01:56 | ||
Подскажите, как лучше его организовать? Ситуация следующая: дети запускаются фоном, после чего они рождают ещё детей. Мне нужно всех их вырезать, потому что, если их не прибить собственноручно, они остаются жить навсегда. Добился нужного через pkill -g $$ в конце (повесил на выход), но возникают определённые подозрения (в частности в связи с тем, что при самоубийстве в баше не появляется приглашение, видимо фишка баша для провисших дескрипторов) или же вообще ломается любой ввод (он не отображается). Я так понял, это вообще проблема, в линуксе нельзя просто взять и узнать, кого мы родили. Мне только pstree -p $bgjobpid показывает, что там кто-то где-то висит во внучках (он обходит всех на предмет родителей?), разбирать выхлоп pstree чёт видится извратом. Вообще, в интернете обещали и что pkill -P $$ будет достаточно, да только дети детей то остаются! | ||
Ответить | Правка | Cообщить модератору |
Оглавление |
Сообщения | [Сортировка по ответам | RSS] |
1. Сообщение от Аноним (0), 13-Май-20, 03:02 | +/– | ![]() |
Что-то не то с порядком исполнения, или же временем? Если на exit повешено несколько действий, прилетает sigterm. Если там один pkill -g $$, всё нормально завершается. повесил новую ловушку на выход в ловушке на выход. Что-то странное, я всё чаще начинаю замечать, что не понимаю, почему мой баш работает и как он это делает. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
2. Сообщение от Аноним (2), 13-Май-20, 07:19 | +1 +/– | ![]() |
Да тебе бы сценарии к триллерам писать, а не вот это вот всё) )) | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
3. Сообщение от eRIC (ok), 13-Май-20, 13:32 | +1 +/– | ![]() |
предлагаю название темы поменять, потому-что по таким словам как: "убийство внучек", "суицид" ресурс OpenNet не забанили | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #20 |
4. Сообщение от Аноним (4), 13-Май-20, 14:39 | +/– | ![]() |
> Ситуация следующая: дети запускаются фоном, после чего они рождают ещё детей. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #5 |
5. Сообщение от Аноним (0), 13-Май-20, 17:22 | +/– | ![]() |
Они живут пока мамка жива, если мейн сворачивается по любой из причин внучки должны быть завершены сразу после детей (чтобы детям от них данные не попали и не было гонки). С внучками ещё проблема в том, что они даже не баш и не могут реагировать на изменения предка. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #4 Ответы: #6 |
6. Сообщение от Аноним (4), 13-Май-20, 20:38 | +/– | ![]() |
> У меня нет доступа в детях к внучкам, потому что дети ждут пока внуки завершатся или умрут | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #5 Ответы: #7 |
7. Сообщение от Аноним (0), 13-Май-20, 21:19 | +/– | ![]() |
Вот пример кода: | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #6 Ответы: #8, #10 |
8. Сообщение от Аноним (0), 13-Май-20, 21:24 | +/– | ![]() |
Ой я имел в виду у меня конечно sigint отдельно, всё равно после завершения остаются висеть под мейном. Я запустил этот пример, и у меня слипы плодятся несколько раз, но последний переходит под инит и висит до завершения и вот он-то мне и нужен исчезнувшим сразу. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #7 Ответы: #9 |
9. Сообщение от Аноним (0), 13-Май-20, 21:25 | +/– | ![]() |
Нет, со слипами всё в порядке. А вот по завершении висеть под инитом последний слип дочки (он же внучка) остаётся. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #8 |
10. Сообщение от Аноним (4), 13-Май-20, 21:55 | +/– | ![]() |
Нужно сделать ещё один trap в bgloop(): | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #7 Ответы: #11, #12 |
11. Сообщение от Аноним (0), 13-Май-20, 22:25 | +/– | ![]() |
Похоже, то что нужно, спасибо. Только всё ещё не понятно, почему $bgjob и jobs -p сообщают о процессе, который не существует с точки зрения kill при sigint. Он исчезает из-за sigint? И как мне его останавливать тогда, если для мейна его уже нет из-за sigint? Он может и быть, а может и не быть. Неприятненько, куда лучше, когда код без плавающих багов. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #10 Ответы: #13 |
12. Сообщение от Аноним (0), 13-Май-20, 22:57 | +/– | ![]() |
Заметил что при таком использовании работает корректно, только если в bgloop прилетают оба сигнала (sigint и sigkill), если kill $bgpid не отправлять из мейна (выходе), то фоновый процесс останется висеть и вместе с внучками перейдёт под инит. Или он может остановится sigint, и тогда из мейна его уже не убить на выходе. Если отправлять pkill -g $$ в мейне, то bgloop получает только int (не term) и до обработчика exit дело не доходит. Кроме того, 1 раз я успел заметить, что внучка перед смертью переходит под инит (в принципе это не плохо), это значит смерть не мгновенная? | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #10 |
13. Сообщение от Аноним (4), 14-Май-20, 12:11 | +/– | ![]() |
> почему $bgjob и jobs -p сообщают о процессе, который не существует с точки зрения kill при sigint. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #11 Ответы: #14 |
14. Сообщение от Аноним (0), 14-Май-20, 17:14 | +/– | ![]() |
> Сейчас проверил, своим потомкам, если это не внешние программы, bash пересылает сигналы | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #13 Ответы: #15 |
15. Сообщение от Аноним (4), 14-Май-20, 20:25 | +/– | ![]() |
> И мне не надо bgloop& wait, мне надо чтобы он работал параллельно, в #10 мы в мейне ждём завершения фонового процесса, которое не случится пока мы не прервём. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #14 Ответы: #16 |
16. Сообщение от Аноним (0), 15-Май-20, 20:05 | +/– | ![]() |
Поэтому я и пытаюсь их прибить до выхода, но я даже не знаю кого. Думал на тему того, чтобы передавать пиды внучек через диск. но что-то и так уже слишком много файлов генерирую. Попробовал повесить wait на sigexit в мейне, что-то эксперименты не увенчались успехом и bgloop замечательно продолжает жить отдельно после нормального завершения мейна. Но sigint останавливает, это да. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #15 Ответы: #17, #18 |
17. Сообщение от Licha Morada (ok), 15-Май-20, 21:19 | +/– | ![]() |
> Поэтому я и пытаюсь их прибить до выхода, но я даже не | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #16 |
18. Сообщение от Аноним (4), 19-Май-20, 02:11 | +/– | ![]() |
> sigexit | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #16 |
19. Сообщение от user user (?), 20-Май-20, 15:24 | +/– | ![]() |
чисто из любопытства, какой сценарий привел победе fork на pthread_create? | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
20. Сообщение от Сейд (ok), 05-Июн-20, 20:37 | +/– | ![]() |
Поменяли, но внизу на главной странице название почему-то осталось: https://i.imgur.com/yD5x4Dz.png | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #3 |
Архив | Удалить |
Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема |
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |