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