Можно ли дважды обработать процесс в Java? - PullRequest
3 голосов
/ 28 января 2010

Мне нужно выполнить двойную вилку VMware, чтобы она не наследовала идентификатор терминала (TTY / pts).

Это то, что у меня пока есть, но я не могу получить доступ к процессу runtime.exec, чтобы форкнуть другой процесс (который удаляет идентификатор терминала).

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("vmware");

Есть ли способ "демонизировать" в Java?

Ответы [ 3 ]

4 голосов
/ 28 января 2010

Вам понадобится написать небольшую программу на C или C ++, чтобы выполнить дополнительный форк, setsid и все такое.

1 голос
/ 28 января 2010

На самом деле вам не нужно «двойную вилку», для этого нужна только одна вилка. Затем ребенок должен закрыть stdin, out, error и начать новый сеанс.

1 голос
/ 28 января 2010

Чтобы упростить вам жизнь, вам необходимо отключить приложение от оболочки, закрыв потоки ввода / вывода, которые неявно подключены к текущему терминалу.

Чтобы сделать это проще для себя, взгляните на проект akuma . Это было бы более чистым решением в простой Java без использования оболочек C.

Вот сообщение в блоге , обсуждающее его.

...