Java: получить процесс, получив pid - PullRequest
13 голосов
/ 22 октября 2010

Скажите, что у меня есть текущий запущенный процесс, как я могу превратить его в объект Process в Java? Процесс уже запущен, поэтому я не хочу порождать другой, я просто хочу инкапсулировать его в объект Process, который я могу использовать в коде Java. Что-то вроде:

int pid = getPid();
Process proc = magicGetProcess(pid);

спасибо

Ответы [ 4 ]

4 голосов
/ 22 октября 2010

Я не думаю, что это возможно, используя только встроенную библиотеку.AFAIK, уже нетривиально получить собственный PID запущенного процесса (см. запрос функции и альтернативные механизмы ).

Быстрый просмотр1007 *java.lang.Process class показывает, что вы можете написать свою собственную реализацию java.lang.Process, используя JNI и собственный код.Ваш пользовательский класс может затем реализовать дополнительные методы, такие как вопрос в вашем вопросе.

0 голосов
/ 30 января 2011

как насчет использования RMI?Можно ли передать объект Process процессу, который он есть?Вероятно, нет, потому что процесс не сериализуем

0 голосов
/ 22 октября 2010

Вы не можете.Каждая операция в Process требует, чтобы этот процесс был дочерним процессом.Не произвольный процесс.

0 голосов
/ 22 октября 2010

В * nix мире захват кода завершения процесса, не являющегося дочерним, не легок, потому что код завершения просто исчезает вместе с процессом, как только родительский процесс получил код завершения дочернего процесса.Вы можете присоединиться к запущенному процессу, используя какой-либо инструмент трассировки, и забрать его код завершения, когда процесс умирает.Большинство ОС * nix имеют инструменты командной строки, которые позволят вам сделать это (например, strace в Linux, ферма в SunOS) ненавязчивым способом.Тем не менее, вы можете использовать их только против ваших собственных процессов или если вы работаете от имени пользователя root.Другой альтернативой является настройка подсистемы аудита вашей ОС для записи кодов выхода всех процессов.

...