0

現時点ではこれを行っています。

                public class ProcessKill {
                private static final String TASKLIST = "tasklist";
                private static final String KILL = "taskkill /IM ";

                public static boolean isProcessRunging(String serviceName) throws Exception {
                 Process p = Runtime.getRuntime().exec(TASKLIST);
                 BufferedReader reader = new BufferedReader(new InputStreamReader(
                 p.getInputStream()));

                 String line;

                 while ((line = reader.readLine()) != null){
                     System.out.println(line);

                     if (line.contains(serviceName)){
                         return true;
                     }
                 }

                 return false;

                }

                public static void killProcess(String serviceName) throws Exception {

                  Runtime.getRuntime().exec(KILL + serviceName);

                 }  


            }

public static void main(String args[]) throws Exception{
    ProcessKill pkill = new ProcessKill();
    String processName = "wmplayer.exe";

    if (pkill.isProcessRunging(processName)){
        pkill.killProcess(processName);
    }

}

唯一の問題は、名前が変更された場合はどうなるかということです。コードを更新し続けたくありません。.exe ファイルの 16 進値を取得し、代わりにそれを検出するために Java に読み込む方法はありますか?

ありがとう

4

2 に答える 2

0

まあ、最初に実行して、強制終了したいプロセスが実行されているかどうかを確認できますwmic.exe PROCESS where name='"+processName+"'.WMICはPROCESS DELETEオプションを提供しますが、これを呼び出すとJavaプロセスがブロックされます. wmic PROCESS(特定のプロセス名なし) Windows マシンで現在実行中のすべてのプロセスのリスト (および説明) を返しますInputSreamReader()。さらに、ターゲット プロセスの行には、プロセスに渡される引数が含まれています。これを使用して、複数のプロセスを実行している場合にプロセスを区別したり、アプリケーションが使用したリソース ファイルを削除したりする必要があります。

単体テストに組み込みの mongodb を使用するアプリケーションのデバッグ中に、組み込みの mongod プロセスをデバッグした後、実行を続け、次の単体テストでの作業を拒否しました (単体テストのクリーンアップが適切に実行されなかったため) - さらに、ローカルを作成しました新しい組み込みmongodプロセスによってオーバーライドできなかったデータストア - そのため、手動で削除する必要がありました. そのため、WMIC から返された行からファイルを抽出し、プロセスを自動的に強制終了した後にファイルを削除しました。

于 2013-10-27T10:26:17.160 に答える