任意のプロセスからレジストリをシャットダウンする方法を見つけました (さらに言えば、レジストリにバインドされているバインドされたプロセスをシャットダウンします)。
リモートを拡張し、最終的に削除したいインターフェースは、次のインターフェースも拡張する必要があります。
public interface PIDSupplierInterface extends Remote {
String getPID() throws RemoteException;
}
インターフェイスの一部としてこれを使用して作成するすべてのサーバー クラスは、getPID() を実装する必要があります。次に、プロセス ID を返す必要があります。Windows の場合は Google の「getpids」を使用するか、www.jroller.com/ santhosh/entry/get_current_java_process_idにアクセスしてください。私が理解しているように、Linuxの場合、PIDの取得はより簡単です。次に(Windowsで)行きたい
String PID = myServer.getPID();
String[] a_command = { "taskkill", "/pid", PID };
Runtime.getRuntime().exec(a_command, envp, dir);
レジストリ自体の PID を無効にするには、まず、レジストリを (プログラムで) 起動するときに、次のようにします。
PIDSupplierInterface stub = PIDSupplierInterface)UnicastRemoteObject.exportObject(
new PIDSupplierServer(), 0);
reg.bind( "regKiller", stub );
ここで、PIDSupplierServer は、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);
システムからregが消えました。または、何らかの理由で質問がより複雑になっていますか? どんなコメントでも大歓迎です。