Java: получить процесс с заданным pid

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

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

спасибо

4 ответов


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

быстрый просмотр java.lang.Process класс показывает, что вы можете написать свою пользовательскую реализацию java.lang.Process использование JNI и собственного кода. Затем ваш пользовательский класс может реализовать дополнительные методы, такие как в вашем вопросе.


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


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


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