Как убить дочерний процесс при убийстве родителя

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как убить дочерний процесс при убийстве родителя

Сообщение Владимир » 08.11.2012 12:10:40

Всем доброго!
Есть задача убить дочерний процесс при убийстве родителя.
Думал, что это само собой - нет папы - нет дочери...
Использую fpFork(), fpExecv().
Убиваю родителя - дочерний живет и здравствует! Это правильно?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Как убить дочерний процесс при убийстве родителя

Сообщение B4rr4cuda » 09.11.2012 04:02:01

Правильно. Надо искать дочерние процессы и грохать их отдельно.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Как убить дочерний процесс при убийстве родителя

Сообщение Владимир » 09.11.2012 12:31:44

B4rr4cuda писал(а):Правильно. Надо искать дочерние процессы и грохать их отдельно.

Спасибо. Пока родитель живет, можно по OnClose убивать дочерний по его pid. Но если пользователь завершит сеанс при запущенном родителе, события OnClose не будет и дочерний процесс останется. Можно, конечно, где-то запоминать pid дочернего и при старте родителя проверять наличие дочернего... Хочется как-то попроще!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Как убить дочерний процесс при убийстве родителя

Сообщение B4rr4cuda » 09.11.2012 19:53:53

Я не совсем понял, что вы имеете в виду. При чем тут OnClose и завершение сеанса?
Если имеется в виду убитие дочерних процессов при завершении сессии системы, то ловим WM_QUERYENDSESSION и проводим нужные действия.
А вообще убийство лучше на OnDestroy вешать.. он точно должен быть вызыван при завершении сеанса.. и OnCloseQuery тоже вызывается, в отличии от onClose, хотя надо проверять...

Добавлено спустя 1 минуту 25 секунд:
Хм, а если кроссплатформа или чисто лин, то надо только на lcl завязываться.. тут точно только OnDestroy
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Как убить дочерний процесс при убийстве родителя

Сообщение Владимир » 09.11.2012 20:30:55

B4rr4cuda писал(а):Хм, а если кроссплатформа или чисто лин, то надо только на lcl завязываться.. тут точно только OnDestroy

Чисто лин...WM_QUERYENDSESSION - не здесь. При завершении сессии OnDestroy тоже не отрабатывается - проверял. OnCloseQuery вроде тоже не работает (проверю) - не работает - проверил.
Может, не совсем ясно изложил задачу?
Есть иксы, под ними запущено приложение. Если грохнуть иксы (завершение сеанса), то приложение естественно падает без каких-либо сообщений (или я не знаю, что обрабатывать). Ну и далее, по первоначальной задаче - как грохнуть дочерний процесс?
Ну и в идеале: захожу на удаленную машину, грохаю иксы - все отрабатывается в плане убийства дочернего приложения.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Как убить дочерний процесс при убийстве родителя

Сообщение B4rr4cuda » 10.11.2012 01:24:48

Из разряда идей - в потомках отслеживать наличие процесса родителя и убиваться, если его нет.
Возможно есть более адекватные решения, но я их не знаю. Надо экспериментировать.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Как убить дочерний процесс при убийстве родителя

Сообщение Владимир » 10.11.2012 08:58:27

B4rr4cuda писал(а):Надо экспериментировать.

Спасибо, буду думать.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Как убить дочерний процесс при убийстве родителя

Сообщение PapaNT » 10.11.2012 12:30:23

Дочерние процессы самописные? Если да, то им можно передавать ID родительского процесса, а дальше отслеживать...
Или в процедуре кнопки "Завершить" добавить убийство дочерних процессов...
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Как убить дочерний процесс при убийстве родителя

Сообщение Владимир » 10.11.2012 18:07:02

PapaNT писал(а):Или в процедуре кнопки "Завершить" добавить убийство дочерних процессов...

Да это понятно. Фокус в том, чтобы убивать дочерние процессы при завершении сеанса, когда родитель убивается без следа.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Как убить дочерний процесс при убийстве родителя

Сообщение alex208210 » 10.11.2012 21:44:20

если процессы самописные, то дочернему можно прописать мониторинг работы родителя, если родитель умер, то убить себя.
Если линукс, дочернему отправляем вывод консоли от
ps -A | grep parrentprocess
и парсим, парсим
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: Как убить дочерний процесс при убийстве родителя

Сообщение Владимир » 11.11.2012 09:28:38

alex208210 писал(а): мониторинг работы родителя, если родитель умер, то убить себя.

Здравая мысль, спасибо!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 237

Рейтинг@Mail.ru