Почему два подпроцесса, созданные в Java, ведут себя по-разному? - PullRequest
4 голосов
/ 21 апреля 2010

Я использую 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. (Не уверен, что они имеют значение ~)

Новичок в этой области. Любое предложение приветствуется.

Лилия

1 Ответ

2 голосов
/ 21 апреля 2010

C ++ EXE почти наверняка помечен как консольное приложение. Я думаю, что jar будет по умолчанию рассматриваться как приложение с графическим интерфейсом и будет выполнять стандартную функцию отсоединения от основного процесса.

Если бы вы взяли код C ++ и превратили его в приложение с графическим интерфейсом, я думаю, вы бы увидели, что он ведет себя подобно банке.

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