Как я могу программно закрыть СПЕЦИФИЧЕСКОЕ Java-приложение, работающее в Windows, из другой программы? - PullRequest
1 голос
/ 10 декабря 2010

Мне нужно (принудительно) закрыть определенное Java-приложение из другой программы.Для любой нативной программы, убивающей ее процесс или отправляющей vm_close в главное окно, это обычно работает, но не так, как Java-приложения, работающие в Windows.Обратите внимание, что Java-приложение показывает только значок в трее и не имеет открытого окна в нормальном состоянии.

Ответы [ 3 ]

3 голосов
/ 10 декабря 2010

Если вы знаете PID вашей Java-программы, используйте это:

Runtime.getRuntime().exec("taskkill /F /PID bla");

, где bla - PID вашей программы.

Этот параметр /F принудительно убьет приложение, и я не вижу причины, по которой Java-программа будет отличаться от других программ и сможет пережить это.

Обратите внимание, что этот код явно относится к Windows. Если вы хотите, чтобы оно было переносимым, вы должны сначала выяснить, в какой ОС размещается ваше приложение, используя

System.getProperty("os.name")

и далее, используйте taskkill /F, если вы используете Windows, или kill -9, если вы используете * nix-систему, или что-то еще, если вы используете более экзотическую платформу.

Обновление : чтобы получить хороший обзор всех запущенных процессов, я бы порекомендовал Process Explorer . Если вам нужен список процессов командной строки, используйте PsList .

Если вы хотите убить определенную Java-программу, это может быть проблематично, поскольку каждый Java-процесс по умолчанию называется java.exe или javaw.exe.

Используя PsList, вы можете программно сканировать все процессы, которые начинаются с java, а затем, вместе с jps, вы получите больше информации о том, что вы действительно хотите убить.

0 голосов
/ 10 декабря 2010

Что, если вы записали идентификатор процесса Java-приложения во временный файл в известном месте.Когда программа запускается, сделайте что-то вроде:


//mark the instance file for delete
String instanceFileLocation = System.getProperty("java.io.tmpdir") + File.separator + "instances.dat";
File PIDFile = new File(instanceFileLocation).deleteOnExit();
//write the process id here

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

Затем используйте

0 голосов
/ 10 декабря 2010

простой способ - скопировать / вставить вторую версию java.exe (или javaw.exe), назвать ее java_alt.exe и затем убить процесс под новым именем, используя Unix Tools для windows

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...