Я также думаю, что эмуляция Ctrl-C для полного уничтожения ssh проблематична.
Что бы я сделал, это один из следующих подходов. Либо используйте команды windows, чтобы узнать, кто являются сыновьями ssh (что немного проблематично, так как вам нужно знать текущий pid для получения ваших собственных дочерних процессов). Я считаю, что pstools sysinternals - хороший инструмент командной строки, который должен позволить вам отслеживать потерянные процессы. См. этот пример для управления процессами Windows либо с taskList.exe
(который может дать вам свой вывод в формате CSV BTW), либо с помощью специального VBScript.
Второй подход заключается в использовании библиотеки Java, такой как winp , для выполнения и управления процессом ssh. Я полагаю, что вы сможете перечислить всех его детей и принудительно убить их, если отправка правильного сообщения будет недостаточной. Это был бы мой предпочтительный подход. Обратите внимание, что метод killRecursively делает именно то, что вы хотите.
Обратите внимание, что эти подходы не должны отображать только окна вашего приложения. Вы можете инкапсулировать те из них, которые будут работать по-разному на компьютерах с Windows и Linux.
Обратите внимание, что я не пытался получить детальный контроль над процессами Windows с помощью, поэтому я не уверен, насколько зрелыми будут те решения, которые я нашел.