Как убить дочерний процесс при убийстве родителя
Модератор: Модераторы
Как убить дочерний процесс при убийстве родителя
Всем доброго!
Есть задача убить дочерний процесс при убийстве родителя.
Думал, что это само собой - нет папы - нет дочери...
Использую fpFork(), fpExecv().
Убиваю родителя - дочерний живет и здравствует! Это правильно?
Есть задача убить дочерний процесс при убийстве родителя.
Думал, что это само собой - нет папы - нет дочери...
Использую fpFork(), fpExecv().
Убиваю родителя - дочерний живет и здравствует! Это правильно?
Re: Как убить дочерний процесс при убийстве родителя
Правильно. Надо искать дочерние процессы и грохать их отдельно.
Re: Как убить дочерний процесс при убийстве родителя
B4rr4cuda писал(а):Правильно. Надо искать дочерние процессы и грохать их отдельно.
Спасибо. Пока родитель живет, можно по OnClose убивать дочерний по его pid. Но если пользователь завершит сеанс при запущенном родителе, события OnClose не будет и дочерний процесс останется. Можно, конечно, где-то запоминать pid дочернего и при старте родителя проверять наличие дочернего... Хочется как-то попроще!
Re: Как убить дочерний процесс при убийстве родителя
Я не совсем понял, что вы имеете в виду. При чем тут OnClose и завершение сеанса?
Если имеется в виду убитие дочерних процессов при завершении сессии системы, то ловим WM_QUERYENDSESSION и проводим нужные действия.
А вообще убийство лучше на OnDestroy вешать.. он точно должен быть вызыван при завершении сеанса.. и OnCloseQuery тоже вызывается, в отличии от onClose, хотя надо проверять...
Добавлено спустя 1 минуту 25 секунд:
Хм, а если кроссплатформа или чисто лин, то надо только на lcl завязываться.. тут точно только OnDestroy
Если имеется в виду убитие дочерних процессов при завершении сессии системы, то ловим WM_QUERYENDSESSION и проводим нужные действия.
А вообще убийство лучше на OnDestroy вешать.. он точно должен быть вызыван при завершении сеанса.. и OnCloseQuery тоже вызывается, в отличии от onClose, хотя надо проверять...
Добавлено спустя 1 минуту 25 секунд:
Хм, а если кроссплатформа или чисто лин, то надо только на lcl завязываться.. тут точно только OnDestroy
Re: Как убить дочерний процесс при убийстве родителя
B4rr4cuda писал(а):Хм, а если кроссплатформа или чисто лин, то надо только на lcl завязываться.. тут точно только OnDestroy
Чисто лин...WM_QUERYENDSESSION - не здесь. При завершении сессии OnDestroy тоже не отрабатывается - проверял. OnCloseQuery вроде тоже не работает (проверю) - не работает - проверил.
Может, не совсем ясно изложил задачу?
Есть иксы, под ними запущено приложение. Если грохнуть иксы (завершение сеанса), то приложение естественно падает без каких-либо сообщений (или я не знаю, что обрабатывать). Ну и далее, по первоначальной задаче - как грохнуть дочерний процесс?
Ну и в идеале: захожу на удаленную машину, грохаю иксы - все отрабатывается в плане убийства дочернего приложения.
Re: Как убить дочерний процесс при убийстве родителя
Из разряда идей - в потомках отслеживать наличие процесса родителя и убиваться, если его нет.
Возможно есть более адекватные решения, но я их не знаю. Надо экспериментировать.
Возможно есть более адекватные решения, но я их не знаю. Надо экспериментировать.
Re: Как убить дочерний процесс при убийстве родителя
B4rr4cuda писал(а):Надо экспериментировать.
Спасибо, буду думать.
-
PapaNT
- постоялец
- Сообщения: 167
- Зарегистрирован: 11.09.2009 12:06:46
- Откуда: Москва
- Контактная информация:
Re: Как убить дочерний процесс при убийстве родителя
Дочерние процессы самописные? Если да, то им можно передавать ID родительского процесса, а дальше отслеживать...
Или в процедуре кнопки "Завершить" добавить убийство дочерних процессов...
Или в процедуре кнопки "Завершить" добавить убийство дочерних процессов...
Re: Как убить дочерний процесс при убийстве родителя
PapaNT писал(а):Или в процедуре кнопки "Завершить" добавить убийство дочерних процессов...
Да это понятно. Фокус в том, чтобы убивать дочерние процессы при завершении сеанса, когда родитель убивается без следа.
-
alex208210
- постоялец
- Сообщения: 207
- Зарегистрирован: 12.05.2010 13:16:51
Re: Как убить дочерний процесс при убийстве родителя
если процессы самописные, то дочернему можно прописать мониторинг работы родителя, если родитель умер, то убить себя.
Если линукс, дочернему отправляем вывод консоли от
ps -A | grep parrentprocess
и парсим, парсим
Если линукс, дочернему отправляем вывод консоли от
ps -A | grep parrentprocess
и парсим, парсим
Re: Как убить дочерний процесс при убийстве родителя
alex208210 писал(а): мониторинг работы родителя, если родитель умер, то убить себя.
Здравая мысль, спасибо!
