как убить процесс в java после завершения задания в java


У меня есть код, подобный:

URL url = Activator.getDefault().getBundle().getEntry("/resources/server.bat");
String fileURL = FileLocator.toFileURL(url).toString();
String commandLine = "cmd.exe /c start " +fileURL;
Process process= Runtime.getRuntime().exec(commandLine);

Как я могу убить процесс, как только работа будет выполнена в java

3   2   2011-07-15 16:18:37

3 ответа:

process.destroy()

Но он не будет иметь контроля над процессом, начатым с server.bat , которые запускаются отдельно

Время выполнения.exec создает процесс, который фактически является вложенной оболочкой на целевой машине. Эта конкретная суб-оболочка может быть уничтожена или прекращена с помощью процесса.destroy(); метод. Но конкретный подпроцесс может породить множество других подпроцессов для других внешних команд в пакете или сценарии оболочки. Если мы убьем родительский процесс, то дочерние процессы могут не быть убиты, и это может ухудшить ситуацию.

Прежде всего, вы должны уже знать, что при выполнении программы Java она выполняется на JVM (виртуальной машине Java). Таким образом, при выполнении команды "tasklist" вы не сможете увидеть имя процесса Java.

К счастью, когда у вас установлен JDK, вы можете видеть все процессы java, запущенные на вашей машине, с помощью инструмента состояния процесса виртуальной машины Java. Чтобы использовать его, просто введите команду "jps":

Как вы можете видеть, команда "jps" дает вам все необходимую информацию, такую как идентификатор и название процесса Java. Таким образом, используя имя процесса java, вы теперь можете убить нужный процесс.

Здесь вы можете найти волшебную командную строку:

for /f "tokens=1" %i in ('jps -m ^| find "JAVA_PROCESS_NAME"') do ( taskkill /F /PID %i )

Эта команда выполнит команду " jps-m "и получит PID процессов java, которые содержат заданное" JAVA_PROCESS_NAME "и выполнит" taskkill /F /PID". N. B. 1: Замените "JAVA_PROCESS_NAME" вашим собственным именем процесса. N. B. 2: для файлов bat поставьте двойной % (%%i) вместо одного из них.

Например, чтобы убить программу Eclipse, введите следующую команду:

C:\Users\YannickL>for /f "tokens=1" %i in ('jps -m ^| find "Eclipse"') do ( taskkil l /F /PID %i ) C:\Users\YannickL>(taskkill /F /PID 5076 ) SUCCESS: The process with PID 5076 has been terminated.