2013-04-17 3 views
2

Windows 시스템에서 실행중인 여러 Java 프로세스가 있습니다. 다른 프로세스를 모니터하고 주기적으로 새 프로세스를 종료하거나 다시 시작해야하는 Java 프로세스가 있습니다.다른 Java 응용 프로그램에서 특정 Java 프로세스 찾기 및 종료

com.foo.Main1을 실행중인 java 프로세스와 com.foo.Main2를 실행중인 java 프로세스가있는 경우 - 내 모니터링 프로세스가 어떻게 Main2 프로세스를 찾아서 죽일 수 있습니까?

업데이트 : 나는 명령 줄 tasklist.exe을 실행하고 분석 할 수있는 몇 가지 코드를 가지고 있지만, 아무리 내가 무엇을, 난 단지 클래스

업데이트 2를 실행하지 않는 경우 java.exe 프로세스를 참조 : 비 자바 프로그램을 설치할 능력이 없습니다.

+0

[이 스레드] (http://stackoverflow.com/questions/62418/knowing-which-java-exe-process-to-kill-on-a-windows-machine) 및 jps에 대한 두 번째 대답을 참조하십시오. wmic 방법은 아마 잘 작동 할 것이다. 이 메시지를 복제본으로 표시하는 중 ... – eis

+0

@이 질문은 다른 Java 응용 프로그램에서 수행하는 방법을 묻기 때문에 실제로는 중복 적이 지 않습니다. 다른 스레드는 모두 OS 도구를 사용하여 수행합니다. – prunge

+0

자갈을 함께 사용하여 묶었습니다. OS 명령과 ProcessBuilder 및 Runtime.exec을 잘못 처리합니다. 우리는 이것을 속임수로 닫아야한다. – Kylar

답변

2

아마도 OS 고유의 도구를 사용하고이를 실행 Runtime.exec()를 사용하여 많은 간단 할 것, 그러나 나는 시도하고 플랫폼을 독립적 인 답변을주지 :


이 작업을 수행 할 수 있습니다를 플랫폼은 독립적으로 Attach API을 사용합니다. 이것은 JDK와 함께 제공되므로 사용하려면 프로그램의 클래스 경로에 JDK의 tools.jar을 포함하면됩니다.

시스템의 가상 컴퓨터 목록을 가져 오려면 VirtualMachine.list()을 사용하십시오. 이 경우에서 반환 된 가상 시스템 설명자 개체에서 인수를 가져 오거나 구문 분석 할 수 있습니다.

첨부 API를 사용하면 이미 실행중인 Java 프로세스에 에이전트를로드 할 수 있습니다. Java 프로세스를 종료하려는 경우 에이전트가로드 될 때 System.exit() (또는 이 실제로 인 경우이를 사용하지 않으려는 경우 Runtime.halt()) 대신 Java 에이전트를 작성할 수 있습니다.

죽이기를 확인한 후에는 attach을 입력하고 킬러 에이전트를로드하십시오. 에이전트는로드해야하는 Java 프로세스에 액세스 할 수있는 JAR 파일로 빌드해야합니다. 에이전트가 부착 된 직후 프로세스는 죽어야합니다. 또한 도움이 될 수

이러한 링크 :

An Oracle blog on the attach API

Package documentation for java.lang.instrument (에이전트 JAR를 구축하는 방법에 대한 자세한있다 지침)

+0

감사합니다. 나는 WMIC와 TASKKILL 같은 명령들을 사용하여 끝났지 만, 이것은 아주 멋지다. 나는 당신이 다른 실행중인 VM의 정보를 얻을 수 있는지 몰랐다. +1 새로운 것을 가르쳐주었습니다. – Kylar

+1

관리자 (게스트/게스트 설정 및 기타 문제에 따라)가 작동하지 않는 명령으로 고생 한 후 Attach API를 사용하여 끝냈습니다. 감사! – Kylar

2

이 윈도우에 고유합니다. 나는 taskkill을 사용하여 특정 자바 프로그램을 죽여야하는 동일한 문제에 직면했다. java 프로그램을 실행할 때, tasklist는 Image name이 java.exe로 설정된 동일한 프로그램을 보여줍니다. 그러나 taskkill/F java.exe를 사용하여 강제 종료하면 필요하지 않은 다른 모든 Java 응용 프로그램이 중지됩니다.

는 그래서 사용하여 동일한 자바 프로그램을 실행

시작 "MyProgramName"자바 자바 프로그램 .. 여기

새 창 MyProgramName로 설정 윈도우의 제목으로 자바 프로그램을 실행 명령을 시작

.

에서 taskkill/FI "MyProgramName"

는 자바 프로그램 만 살해됩니다

지금이 자바 프로그램은 다음에서 taskkill 명령을 사용 KIL합니다. 휴식은 영향을받지 않습니다.

+0

이 답변을 좋아하지만 Java ProcessBuilder를 사용할 때 "별칭"을 설정할 수있는 것처럼 보이지 않습니다. –