문제

I have a Java 응용 프로그램을 실행하는 또 다른 옵션을 선택해야 합니다.처에는 와치독 타이머와 수신기의 알림서 두 번째 VM.그러나지 않으면 알림을 받은 다음 두 번째 가상 기계를 살해해야하고 실행 실행할 것이 몇 가지 추가 청소 활동입니다.

질문가,어떤 방법을 사용하여 이 작업을 수행만 java?지금까지 내가 사용하는 몇 가지 기본 방법은 이 작업을 수행하고 그것은 어떻게 든다.

감사합니다!

도움이 되었습니까?

해결책

내가 누락 될 수 있지만 뭔가 수 없습니다 당신이 전화 destroy() 메서드 Process 체 반환에 의해 Runtime.exec()?

다른 팁

당신이 사용할 수 있는 java.랭.프로세스 무엇을 원하다.을 만든 후에는 중첩된 프로세스에 대한 참조가 있는 프로세스를 인스턴스에 대한 참조를 가져올 수 있습니다 해당 표준 및 err 스트림이 있습니다.할 수 있는 주기적으로 사람들을 모니터링하고,전화입니다.destroy()하려면 프로세스.모든 일은 아래와 같이 설정합니다:

Process nestedProcess = new ProcessBuilder("java mysubprocess").start();
InputStream nestedStdOut = nestedProcess.getInputStream(); //kinda backwards, I know
InputStream nestedStdErr = nestedProcess.getErrorStream();
while (true) {
    /*
       TODO: read from the std out or std err (or get notifications some other way)
       Then put the real "kill-me" logic here instead of if (false)
    */
    if (false) {
        nestedProcess.destroy();
        //perform post-destruction cleanup here
        return;
    }

    Thread.currentThread().sleep(1000L); //wait for a bit
}

이,

Sean

할 수 있습도(서비스를 통해 삼베,독일,etc.)에서 두 번째 JVM 을 호출하는 시스템입니다.exit()및 소비 감시에서 JVM.만 원하는 경우를 종료하는 두 번째 JVM 때 중지내 정기적인 알림이 되지 않을 수도 있습니다 상태에서 응답 서비스 호출합니다.

전화 쉘 명령으로 java.랭.런타임입니다.exec()는 아마도 당신의 최선의 방법입니다.

일반적인 방법으로 이를 수행하는 전화하는 과정입니다.destroy()...그러나 불완전한 솔루션이기 때문을 사용할 때 태양의 JVM 위에*유닉스 파괴하지도에 SIGTERM 는 보장되지는 않 프로세스를 종료(해당해야 합 SIGKILL 뿐만 아니라).그 결과는 당신이 할 수 없는 실제 프로세스를 사용하여 관리 Java.

거기에 몇 가지 오픈 버그에 이 문제에 대한 참조하십시오:텍스트 링크

java.랭.프로세스가 waitFor()메소드를 기다리 프로세스가 죽습니다,그리고 파괴()메소드를 죽이는 하위 프로세스.

인트의 요점은 다음과 같습니다:

내가 사용하는 프로세스 API 가까운 두 번째 가상 기계,하지만 그것은 작동하지 않을 것입니다.

그 이유는 내가 두 번째로 응용 프로그램은 이클립스 RCP 응용 프로그램,그리고 나는 그것을 시작 사용 eclipse.exe 처 포함됩니다.

그러나는다는 것을 의미하는 프로세스 API()메소드를 파괴하고 있습니다 eclipse.exe 과정입니다.을 죽이는 이 프로세스는 Java 프로세스습니까?그래서,제 동료 중 하나는 여기에 쓴 작은 응용 프로그램을 죽일 것이다른 응용 프로그램.

그래서 하나의 솔루션을 사용하여 프로세스 API(과 중복 제거 중간 단계)은 멀리 얻을 수있는 일식처,을 나의 첫번째 가상 기계 중복된 모든 기능이 있습니다.

에게 필요한 것과를 얻을 수 있습니다.

당신이해야 할 수 있는 java.랭.런타임입니다.exec 및 쉘이 명령입니다.

할 수 있습 java 코드를 검출하는 플랫폼에서 런타임 및 발사 플랫폼의 프로세스 kill 명령입니다.이것은 정말 세련미 현재의 솔루션입니다.

과정입니다.destroy(), 를 사용하는 경우 다 ProcessBuilder API

정확하지 않게 프로세스 관리,하지만 당신은 시작할 수 있는 rmi 서버에서 java 가상 머신을 실행,그리고 바인딩 인스턴스와 방법에는 무엇이든 필요한 정리 및 통화 시스템입니다.exit().첫 번째 vm 수 있음 호출하면 원격한 방법을 종료하는 두 번째 vm.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top