5

特定の JAR ファイルが自分のマシンで実行されているかどうかを確認するにはどうすればよいですか? 特定の JAR が一度だけ実行されるようにしたいだけです。そのため、同じ jar を実行する別の要求が届いた場合、その jar を再度呼び出すべきではありません。

上記のコードは、Java コード (その JAR 自体に追加します) またはシェルスクリプト (jar ファイルを呼び出すために使用します) として使用できます。

マシンは、CentOS、Debian、Ubuntu、または Amazon Linux のいずれかの Linux マシンになります。

4

2 に答える 2

6

jpsは、現在実行中の JVM とそれらが実行しているものを出力する単純なコマンドライン ツールです。これは、シェル スクリプトから呼び出すことができます。

jps -lJVM プロセス ID とそれが実行しているメイン クラスをダンプします。それがあなたの要件に最も適していると思います。

あなたのコメントに注意してください。jps がサポートされていない場合、JDK/JRE をアップグレードするときにテストで簡単に軽減できないという懸念がある場合は、おそらく次のようなものを使用してください。

pgrep -lf java
于 2012-12-13T10:36:39.253 に答える
3

新しい jar を作成してみてください。

次のように内部にクラスを作成します(まだ機能するコードではなく、ただの落書きです):

static ServerSocket unicorn;
public void load(){
    unicorn=new ServerSocket(39483); // whatever-port

    URLClassLoader myloader = new URLClassLoader(new URL[]{this.getClass().getResource("/META-INF/specific.jar")});
    ... // do all your unique stuff
    Runtime.addShutdownHook(new Runnable(){unicorn.close();})
}

specific.jar を new.jar 内に配置します。この jar の別のインスタンスをロードしようとすると、例外がスローされます: Socket already in use.

于 2012-12-13T14:25:34.737 に答える