У меня есть консольное приложение Windows, которое будет работать в течение длительного периода времени. Это было разработано собственными силами, и тесты показали, что со временем использование памяти растет, и в результате возникают другие неприятности. Разработчики не могут исправить все проблемы к моменту выпуска, поэтому я ищу способ периодически завершать и перезапускать процесс. У меня уже есть запланированная задача Windows, которая запускает командный файл, проверяет, запущен ли процесс, а если нет, запускает его.
Теперь мне нужно что-то, что изящно его останавливает. Приложение присвоило событие CTRL-BREAK как запрос на управляемое завершение работы. Я хотел бы отправить ему CTRL-BREAK, и если он все еще не закончится через некоторый период времени, я мог бы использовать Taskkill, чтобы завершить его принудительно. taskkill, кажется, подает ему событие CTRL-CLOSE. Есть ли способ передать CTRL-BREAK процессу из командной строки?
Вы можете отправить контрольную паузу с помощью этой маленькой утилиты.
http://www.latenighthacking.com/projects/2003/sendsignal/
нота Обязательно используйте start
если вы запускаете его из командного файла.
Я не знаю, считается ли событие прерывания изящным закрытием приложения.
Тем не менее, ищите утилиты ps в sysinternals, бесплатно от Microsoft. Есть команда pskill, которую можно использовать для уничтожения приложений, и я считаю, что pslist позволяет получить идентификаторы процесса. Разберите его и отправьте ему сигнал об уничтожении, посмотрите, сработает ли это для вас.