>

다음과 같이 Java에서 하위 프로세스를 시작합니다.

final String[] cmd = {"<childProcessName>"};
Process process = Runtime.getRuntime().exec(cmd);

이제 백그라운드에서 실행됩니다. 다 괜찮아

내 프로그램이 이제 충돌하면 (아직dev에 여전히 :-)) 자식 프로세스는 여전히 멈춘 것처럼 보입니다. 부모 Java 프로세스가 종료 될 때 자동으로 종료되도록하려면 어떻게해야합니까?

도움이된다면 Mac OS X 10.5를 사용하고 있습니다

  • 답변 # 1

    아시다시피, addShutdownHook이 갈 길입니다.

    하지만 :

    프로그램이 종료 된 경우 종료 훅이 실행된다는 보장은 없습니다. 누군가 Java 프로세스를 종료시킬 수 있으며이 경우 종료 후크가 실행되지 않습니다. (이 SO 질문에서 언급했듯이)

    일부 표준 라이브러리에는 사용자 자신의 후크가있을 수 있습니다.

    교착 상태에주의하십시오.

    또 다른 가능성은 자바 프로그램을 서비스로 감싸는 것입니다.

  • 답변 # 2

    나는 이미 스스로 해결했습니다. 다음과 같이 종료 후크를 추가합니다.

    final String[] cmd = {"<childProcessName>"};
    final Process process = Runtime.getRuntime().exec(cmd);
    Runnable runnable = new Runnable() {
        public void run() {
            process.destroy();
        }
    };
    Runtime.getRuntime().addShutdownHook(new Thread(runnable));
    
    

관련 자료

  • 이전 list to treeset 변환은 다음을 생성합니다 "javalangclasscastexception - myclass를 javalangcomparable로 캐스트 할 수 없습니다"
  • 다음 javascript - 하나의 슬라이더에서 여러 범위의 슬라이드 핸들 만들기