2012-08-16 10 views

Odpowiedz

4

Cóż można użyć DefaultExecutor z Apache Commons Exec biblioteki do wykonywania poleceń, ale to wewnętrznie używa java.lang.Runtime i java.lang.Process.

Proponuję użyć tej biblioteki w środowisku wykonawczym, ponieważ funkcje API Apache Command Execution są bardziej zaawansowane i zapewniają więcej i więcej funkcji niż Java Runtime. Obsługuje również wartości wyjściowe.

+0

Czy obsługuje problem z zawieszaniem, jak opisano w tym komentarzu - http://stackoverflow.com/a/5483880/537503? –

0

Istnieje wiele możliwych sposobów; ale nie mogę nazwać żadnego z nich pożądanym bez zrozumienia twojej motywacji.

Na przykład napisz program w języku C lub Perl lub w innym języku i posłuchaj go na gnieździe. Twój program java może następnie połączyć się z gniazdem i wysłać wiadomość z nazwą programu do odradzania, argumentów itp. Program odbiornika może iść dalej i odrodzić to.

+0

w prawo, więc pomysł na to jest stworzenie aplikacji serwera java, która odpowiada na podstawowe polecenia, takie jak ls, pwd, cd itp. – tosi

0

Istnieją dwa sposoby wykonywania poleceń Unix:

  1. Można używać java.lang.Runtime i java.lang.Process
  2. Można użyć JNI/JNA dostęp do bibliotek współdzielonych. Możesz więc użyć tego, aby uzyskać dostęp do poleceń na poziomie systemu operacyjnego, aby utworzyć proces (na Unixie) (system() i exec*()).

Drugie podejście nie jest zalecane: Trudno, aby uzyskać prawo i ostatecznie, można skończyć z czymś, co ma dokładnie taką samą funkcjonalność jak Runtime.exec()

Jeśli potrzebujesz tylko funkcjonalność, a następnie możesz ponownie zaimplementować komendy w Javie. Na przykład, aby zaimplementować ls, należy użyć File.listFiles()

Powiązane problemy