LINUX.ORG.RU

Подскажите идейно-лучший способ слежения за смертью родителя

 , , , ,


0

2

Есть пара родитель-ребенок связанная пайпами. Нужно чтобы родитель узнал о смерти родителя без read()/write() на пайпах.

покачто рассматриваются идеи

- prctl(SIGHUP);

- fcntl(stdin, F_SIGSET, SIGHUP);

★★★★★

А чем представленные варианты не устраивают-то?

Gvidon ★★★★ ()

Из переносимых вариантов:

1. В отдельном потоке выполнять read()
2. Периодически проверять pid родителя (по таймеру или ещё как)

При проверке pid родителя, чтобы не было рейсов, надо сравнивать pid родителя с начальным значением, которое родитель должен явно передать ребёнку при форке.

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

Мне лень писать... по всё уже украденонаписано за вас.

Смотри как это реализовано в классических демонах.

anonymous ()
Ответ на: комментарий от Sorcerer

которое родитель должен явно передать ребёнку при форке.

Даже так?

cvv ★★★★★ ()

.. слежения за завершением родительского процесса

звучало бы лучше

Harald ★★★★★ ()

почаще звонить.

anonymous ()

IMHO c идейностью все плохо. Можно посмотреть в сторону всяких waitpid(), wait3(), wait4().

pathfinder ★★★ ()
Ответ на: комментарий от pathfinder

Ты не понял. Вайты следят за детьми. Мне нужно смотреть за родителем.

cvv ★★★★★ ()
Ответ на: комментарий от cvv

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

ananas ★★★★★ ()
Ответ на: комментарий от ananas

процесс запускает родителя и ждет его смерти, дальше kill(0,...)

imho дети должны получить этот kill

vel ★★★★★ ()
Ответ на: комментарий от cvv

Даже так?

А как ещё? В старые добрые времена достаточно было сравнить getppid() с 1 для проверки существования родителя, а теперь, с приходом свистелок, процессы-сироты могут усыновляться всяким сбродом. А передавать от родителя надо, потому что родителю никто не мешает умереть сразу после форка, ещё до первого вызова getppid() дочерним процессом. Передать можно через локальную переменную, конечно, если это просто fork(), без exec().

Sorcerer ★★★★★ ()
Ответ на: комментарий от Sorcerer

Уже возможен репарент не на Инит? Как же я устарел ...

cvv ★★★★★ ()
Ответ на: комментарий от vel

За такие посты лор заблочат, за пропаганду...

AUX ★★ ()
Ответ на: комментарий от AUX

Это модераторам решать.

А способ с kill(0,x) рабочий. Главное чтоб никто из потомков не делал setsid() и setpgrp()/setpgid()

vel ★★★★★ ()

Купи несколько вебкамер и в родительской квартире их размести в разных углах

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