2008-10-10 4 views
24

Java 프로세스 제어가 악명 높습니다. 이는 주로 Java VM/JDK 클래스 (예 : java.lang.Process)의 지원이 부적절하기 때문입니다.Java 프로세스 제어 라이브러리 양호

신뢰할 수있는 오픈 소스 라이브러리가 있는지 궁금합니다.

요구 사항은 다음과 같습니다

  1. OSS
  2. 시작/중지는
  3. 은 STDIN과 STDOUT
  4. 크로스 플랫폼 (적어도 리눅스, 윈도우, 솔라리스, HP 및 IBM에서 관리 처리 그 주문)
  5. (선택 사항) 재시작 가능
  6. (바람직한) 성숙한
+0

필자는 프로세스 종속성 개념을 요구 사항으로 추가했습니다. 종속 프로세스/서비스가 시작된 경우에만 프로세스/서비스를 시작해야합니다. 프로세스/서비스가 중지되면 모든 종속 프로세스/서비스가 중지됩니다. –

+0

지금은 2015입니다. 변경된 사항이 있으면이 질문에 대한 답변이 달라졌 을까합니다. – wilx

답변

4

Java Service Wrapper 등이 있습니다. 그것은 크로스 플랫폼이며, Windows 서비스로서 일을 시작하고, IO를 캡처하고, 일반적으로 모든 Java 응용 프로그램을 관리하는 데 사용할 수 있습니다. 매우 가벼우 며 잘 설계되었습니다. Atlassian은이 제품을 사용하여 제품 (Jira, Bamboo 등)을 포장하므로 전투 테스트를 거칩니다.

+2

서비스 관리를 위해 괜찮습니다. 그러나 쉬운 프로세스 제어를 위해 사용될 수있는 라이브러리는 거의 없습니다. 또한 OSS가 아닙니다. –

+0

@Omry JSW는 매우 훌륭한 공정 제어 라이브러리 (http://wrapper.tanukisoftware.com/doc/english/child-exec.html)를 가지고 있습니다. 문제는 그것이 OSS가 아니라는 것입니다. – jnorris

13

Apache Commons Exec 어떨까요?

+1

좋은 팁 - 좋은 자습서, 너무! http://commons.apache.org/exec/tutorial.html – grrussel

+1

Apache Commons Exec은 Java Service Wrapper와 동일한 추상화 수준을 제공한다고 생각하지 않습니다. 프로세스/데몬 관리자를 구현하기 위해 Commons Exec을 시작하는 것이 좋습니다. –

3

고아가 된 프로세스를 종료하기위한 플랫폼 간 지원이 추가로 필요합니다. java.lang.Process (및 Apache Commons Exec)을 사용하면 Java 응용 프로그램이 강제 중지 (kill -9) 할 때 외부 프로세스를 종료 할 수 없습니다. 정말 문제를 더 잘 처리 할 수있는 라이브러리를 찾고 싶습니다.

하나의 솔루션은 디스크의 일부 리소스에 PID를 저장 한 다음 Java 응용 프로그램을 재시작 할 때 프로세스를 종료하는 것입니다. 물론 이것은 플랫폼에 따라 달라 지므로 크로스 플랫폼 라이브러리가 훌륭합니다.