Я использую Java Runtime.getRuntime().exec(command)
, чтобы создать подпроцесс и распечатать его pid
следующим образом:
public static void main(String[] args) {
Process p2;
try {
p2 = Runtime.getRuntime().exec(cmd);
Field f2 = p2.getClass().getDeclaredField("pid");
f2.setAccessible(true);
System.out.println( f2.get( p2 ) );
} catch (Exception ie)
{
System.out.println("Yikes, you are not supposed to be here");
}
}
Я пробовал как исполняемый файл C ++, так и исполняемый файл Java (файл .jar). Оба исполняемых файла будут постоянно выводить «Hello World» на стандартный вывод.
Когда cmd
является исполняемым файлом C ++, pid
выводится на консоль, но подпроцесс уничтожается, как только возвращается main()
. Однако когда я вызываю исполняемый файл .jar в cmd
, подпроцесс не уничтожается, что является желаемым поведением.
Я не понимаю, почему один и тот же код Java с разными исполняемыми файлами может вести себя так по-разному. Как мне изменить мой код, чтобы иметь постоянные подпроцессы в Java?
PS: я использую Ubuntu 9.10 и OpenJDK-1.6. (Не уверен, что они имеют значение ~)
Новичок в этой области. Любое предложение приветствуется.
Лилия