나는 모든 프로세스에서 레지스트리를 종료 (그리고 그 문제에 대한 모든 바운드 레지스트리에 바인딩 된 프로세스 종료)
원격 확장하고 결국 원하는 인터페이스 중 하나를하는 방법을 발견했다 또한 다음과 같은 인터페이스를 확장해야 죽일 : 그 인터페이스의 일부로서이 함께 만드는
public interface PIDSupplierInterface extends Remote {
String getPID() throws RemoteException;
}
모든 서버 클래스는() GETPID를 구현해야합니다. 그런 다음 프로세스 ID를 리턴해야합니다. Windows 용 Google 'getpids'또는 여기로 이동 : www.jroller.com/santhosh/entry/get_current_java_process_id 리눅스에서는 PID를 이해하는 것이 더 쉽다는 것을 이해합니다. 그런 다음 (Windows에서) 레지스트리를 (프로그래밍 방식) 시작할 때 PIDSupplierServer 클래스이고, 첫째, 단순히
PIDSupplierInterface stub = PIDSupplierInterface)UnicastRemoteObject.exportObject(
new PIDSupplierServer(), 0);
reg.bind("regKiller", stub);
갈 레지스트리 자체의 PID를 죽일
String PID = myServer.getPID();
String[] a_command = { "taskkill", "/pid", PID };
Runtime.getRuntime().exec(a_command, envp, dir);
을 가고 싶어 PIDSupplierInterface 만 구현합니다. 당신이 어떤 프로세스에서 RMI 레지스트리를 죽이고 싶어 할 때
그리고, 단지
PIDSupplierInterface regProcess = (PIDSupplierInterface)reg.lookup("regKiller");
String regPID = regProcess.getPID();
String[] a_command = { "taskkill", "/pid", regPID };
Runtime.getRuntime().exec(a_command, envp, dir);
등록 번호가 시스템에서 사라졌다 이동합니다. 아니면 어떤 이유로 더 복잡한 질문입니까? 모든 의견 환영.
* previous *'createRegistry()'의 * 결과 *는 언 포트 될 수 있습니다.실행 중인지 확인하려면'createRegistry()'를 시도하십시오 :'BindException'을 얻으면'getRegistry()'를 호출하십시오. 물론 앞의 경우에는 unexport 만 할 수 있지만, 후자의 경우에는 다른 사람의 레지스트리이므로 unexviewing에 책임이 있습니다. – EJP