У меня проблема с TerminateProcess () функция.
В настоящее время я пишу приложение JobScheduler, которое планирует и запускает работу в определенное время.
Для этого я использую CreateProcess () выполнить мой JobLauncher.
Затем процесс JobLauncher запускает консольную программу (используя createprocess), которая эффективно выполняет исполняемый файл задания, ожидает его завершения и отслеживает продолжительность, время пользователя и ядра и т.д.
Чтобы убить работу из JobScheduler, я сначала начал использовать TerminateProcess (), но он не позволяет мне правильно закрыть исполняемый файл. Я имею в виду, я не нашел способа перехватить любое событие завершения.
Пока я не найду лучший способ, чем жестокий TerminateProcess (), Я написал промежуточное решение, используя GenerateConsoleCtrlEvent () в вызывающей программе.
В приложении задания, которое запускает исполняемый файл целевого задания, я установил обработчик, используя SetConsoleCtrlHandler ().
А в обработчике я могу прекратить процесс работы и правильно уведомить своих третьих сторон.
Это лучшее решение, которое я нашел на данный момент.
Есть ли лучший способ программно и правильно закрыть процесс?
Считаете ли вы это решение совершенно абсурдным?
Я не специалист по разработке системного уровня, хотя …
З.
Это хорошо известная проблема консоли Windows, и вы можете найти некоторые решения Вот.
Мы использовали на внутренней консоли утилиту, которая имеет название «Kamikaze». Работало как описано Вот и для меня это лучшее решение, потому что нет проблем с портированием между версиями Windows и архитектурами Windows (x86, x64).
Других решений пока нет …