Чтобы вызвать процесс, который выживает после того, как JVM заканчивается вам необходимо использовать Runtime.exec()
,Так как вы хотите, чтобы работать после того, как закончится ваш главный процесс, на самом деле есть два способа сделать это:
1) Если вы хотите обработать, чтобы запустить во время чистой остановки, то вы можете сделать это:
public static void main(String[] args) {
doThisProgramsStuff();
spawnSecondProcess();
}
2) или, если вы хотите, чтобы процесс работать даже с нештатной остановки (или, если это графический интерфейс приложения), то вы можете добавить выключение крючок:
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
spawnSecondProcess();
}
});
doThisProgramsStuff();
}
Существует, однако, проблема с все это. После завершения JVM дочерний процесс будет иметь стандартный ввод/вывод, привязанный ни к чему, поэтому он может заполнить свои выходные буферы и блокировать. Вам нужно что-то сделать, чтобы убедиться, что этого не происходит, либо удостоверившись, что процесс не выводит выходные данные в эти потоки, либо выполняет эквивалент Windows для перенаправления на/dev/null.
Я знаю, что это поздно, но вы посмотрели ['ProcessBuilder'] (http://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html) как другой вариант? – mkobit