LINUX.ORG.RU

Завершение потомков при завершении родителя


0

0

Столкнулся с такой проблему:
1) Есть bash скрипт запущенный в фоне.
2) Этот скрипт при старте проверяет запущен он или нет. И если нет, то создает pid файл.
3) Далее скрипт запускае определенный процесс и следит за его работоспособность. т.е. если процесс завершился с определеннымм кодами, то скрипт перезапускает этот процесс. При других кодах ошибки скрипт тоже завершает свою работу
4) при завершении работы скрипта, он удаляет PID файл

И вот теперь главный вопрос: необходимо сделать так, чтобы при прибитии процесса скрипта (допустим через kill с использованием pid файа), чтобы автоматом завершался и дочерний процесс.
Если просто убить процесс скрипта, то дочерний всё равно продолжает работать.
Или как вариант надо сделать так, чтобы дочерний процесс получал уведомление о том, что родител завершил свою работу и автоматически сам закрылся.



Последнее исправление: slesh (всего исправлений: 1)

Ответ на: комментарий от unsigned

В том, то и дело, что убийство процесса скрипта может происходить по другому, в зависимости от типа его запуска. Если в фоне запущен, то может быть прибит через kill если не в фоне то по ctrl+c.
Пробовал в программе прописать prctl(PR_SET_PDEATHSIG, SIGTERM);
На SIGTERM стоит обработчик, который завершает процесс. Но всё равно при убийстве родителя, процесс не получает этого сигнала. После запуска скрипта, дерево процессов выглядит так:

sbap_mon.sh(533)───sbap_se_x32(543)─┬─{sbap_se_x32}(544)
                                    ├─{sbap_se_x32}(545)
                                    ├─{sbap_se_x32}(546)
                                    └─{sbap_se_x32}(547)
Последнии 4 - это потоки процесса запущенные через pthread_create

slesh
() автор топика
Ответ на: комментарий от mv

Решил проблему чуть по другому.
В скрипте прописал trap «PID_SE=\`<\$PIDFILE\`; kill \$PID_SE &>/dev/null» EXIT
А в проге сделал чтобы она тоже создавала свой PID файл.

slesh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.