Завершение процесса в окнах C/C++

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

Я пытался: 1) atexit 2) SetUnhandledExceptionFilter

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

Помогите,

3 ответа

Это должно ответить на ваш вопрос:

Есть два способа убить приложение в диспетчере задач.

Убийство через вкладку Приложения примерно эквивалентно SIGTERM(в Linux). Приложение может перехватить его и выполнить дополнительную обработку, поскольку оно в основном отправляет сообщение "закрыть окно". Сообщение для ловли - WM_CLOSE.

Вкладка "Уничтожение через процессы" будет примерно эквивалентна SIGKILL(в Linux). Вы ничего не можете сделать, чтобы перехватить это, кроме мониторинга действий пользователя в окне списка диспетчера задач и кнопки "Завершить процесс", или наличия контрольного процесса, который будет видеть, когда убит первый

В консольных приложениях вы должны рассмотреть возможность установки функции обратного вызова HandlerRoutine для перехвата CTRL_C_EVENT, CTRL_BREAK_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT.

В приложениях с графическим интерфейсом вы должны рассмотреть обработку WM_CLOSE, WM_QUERYENDSESSION, WM_ENDSESSION.

Перечислите все запущенные процессы. Как только вы это сделаете, вы получите идентификаторы процессов. Получите дескриптор каждого процесса через ранее полученный идентификатор и найдите процесс, который вы ищете. Используйте тот же дескриптор процесса в отдельном потоке, как это:

WaitForSingleObject (hProcess, INFINITE);

Как только процесс завершается, этот поток завершается.

Другие вопросы по тегам