2010-10-21 13 views
11

Powiedz, że mam znany bieżący proces, w jaki sposób mogę go przekształcić w obiekt Process w Javie? Proces jest już uruchomiony, więc nie chcę odradzać się z innego, po prostu chcę hermetyzować go do obiektu Process, którego mogę użyć w kodzie java. Coś wzdłuż linii:Java: Uzyskaj proces z podanym pidem

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

dzięki

+0

Nie sądzę, że Java ma wbudowane wystarczające możliwości zarządzania procesami. Mam nadzieję, że ktoś mnie oszuka. –

+0

Które z funkcji "Procesu" najbardziej chcesz? Czy próbujesz wykonać 'waitFor()', czy też chcesz przekierować wejścia/wyjścia do swojej aplikacji, lub co? Jestem prawie pewien, że to, o co prosisz, jest niemożliwe, ale być może będziemy w stanie pomóc w spełnieniu twoich rzeczywistych wymagań. –

+0

Cóż, muszę przekazać ten proces do metody, która prawie sprawdza, czy została nieoczekiwanie zakończona i pobiera kod wyjścia, jeśli tak się stało. – Th3sandm4n

Odpowiedz

4

Nie sądzę, jest to możliwe tylko przy użyciu wbudowanego bibliotekę. AFAIK, nietrywialne jest uzyskanie własnego procesu PID (patrz: feature request i alternate mechanisms).

Szybkie spojrzenie na java.lang.Process class pokazuje, że możesz napisać własną implementację java.lang.Process przy użyciu JNI i kodu natywnego. Twoja niestandardowa klasa może wtedy implementować dodatkowe metody, takie jak ta w twoim pytaniu.

+0

Hmm ya tak to wygląda. No cóż. – Th3sandm4n

+0

FYI: zepsuty adres URL dla java.lang.Process – Ismoh

0

In * nix świat przechwytujący kod zakończenia procesu nie będącego dzieckiem nie jest łatwy, ponieważ kod wyjścia po prostu znika wraz z procesem, gdy tylko proces nadrzędny wykrył kod zakończenia dziecka. Możesz dołączyć się do uruchomionego procesu za pomocą jakiegoś narzędzia do śledzenia i odebrać jego kod wyjścia po zakończeniu procesu. Większość systemów * nix posiada narzędzia wiersza poleceń, które pozwolą ci to zrobić (np. Strace w systemie Linux, wiązara na SunOS) w sposób nieinwazyjny. Możesz jednak używać ich tylko w odniesieniu do własnych procesów lub jeśli działasz jako root. Inną opcją jest skonfigurowanie podsystemu kontroli systemu operacyjnego w celu rejestrowania kodów wyjścia wszystkich procesów.

+0

W systemie Unix można użyć funkcji 'waitpid()', aby pobrać kod zakończenia procesu innego niż podrzędne. Problem polega na wywołaniu go z Java. –

0

Nie możesz. Każda operacja w procesie wymaga, aby proces był procesem podrzędnym. Nie arbitralny proces.

0

co z używaniem RMI? Czy możliwe jest przekazanie obiektu Process do procesu, którym on jest? Prawdopodobnie nie, ponieważ Proces nie jest Serializowalny

Powiązane problemy