Здрасте, меня интересует можно ли как-то отреагировать на убийство процесса? Короче другими словами, когда юзер закрывает окно программы, программа получает сообщение WM_DESTROY и тд. А когда например юзер убивает программу таскманагером, то программа это сообщение не получает. Как определить что процесс завершается?
есть 2 вида завершения процесса — мягкий и жёсткий. В первом случае, приходит системное сообщение (в *nix — сигнал) и процесс самостоятельно завершает работу; это сообщение можно перехватить внутри самого процесса и обработать по-своему. Во втором случае процесс прибивается принудительно внешними средствами — операционная система исключает его из планировщика процессов и освобождает все ресурсы; это событие внутри самого процесса никак не отловить, его "никто не спрашивает". Теоретический вариант — пока жив основной процесс, создать новый процесс, изменить его родителя и отслеживать в системе основной процесс. Как только основного не станет — выполнить какие-то действия. Не знаю, прокатит ли в случае "Завершить дерево процессов".
Ясно, спасибо за просвятление. Придется походу действительно запускать вспомогательный процесс и уже из него простукивать каждые пару сек. основной процесс. Наверное будет и самый простой походу вариант.
Да нет, во первых дело не о линухе. А во вторых овчинка выделки не стоит. Просто Prog1 иногда запускает prog2 и комуницирует с ней. Если prog1 завершается она посылает сообщение WM_DESTROY также и prog2. Но вот если prog1 убить то prog2 остается висеть в памяти, что не есть плохо, но не есть "чисто сработанно". Решил проблему созданием нити в prog2 которая простукивает prog1 на существование, и если такогого процесса больше нет, выполняет ExitProcess() и баста.