28

実行可能ファイルの名前を知っている実行中の Win プロセスを見つける Java の方法が必要です。現在実行されているかどうかを確認したいのですが、見つかった場合はプロセスを強制終了する方法が必要です。

4

8 に答える 8

46
private static final String TASKLIST = "tasklist";
private static final String KILL = "taskkill /F /IM ";

public static boolean isProcessRunning(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 {
 String processName = "WINWORD.EXE";

 //System.out.print(isProcessRunning(processName));

 if (isProcessRunning(processName)) {

  killProcess(processName);
 }
}
于 2011-09-19T15:44:31.220 に答える
16

コマンドラインウィンドウツールtasklisttaskkill使用して、を使用してJavaから呼び出すことができますRuntime.exec()

于 2008-09-17T11:06:18.833 に答える
3

必要な機能を提供する小さな API があります。

https://github.com/kohsuke/winp

Windows プロセス ライブラリ

于 2010-04-19T13:59:56.177 に答える
2

SysInternals PsKillSysInternals PsListなどのプロセスを強制終了するコマンド ライン ツールを使用できます。

組み込みの tasklist.exe と taskkill.exe を使用することもできますが、これらは Windows XP Professional 以降でのみ使用できます (Home Edition では使用できません)。

プログラムを実行するには、java.lang.Runtime.execを使用します。

于 2008-09-17T10:53:58.473 に答える
1

次のクラスを使用して、Windows プロセスを強制終了します(実行中の場合)。force コマンドライン引数/Fを使用して、引数で指定されたプロセスが確実/IMに終了するようにしています。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class WindowsProcess
{
    private String processName;

    public WindowsProcess(String processName)
    {
        this.processName = processName;
    }

    public void kill() throws Exception
    {
        if (isRunning())
        {
            getRuntime().exec("taskkill /F /IM " + processName);
        }
    }

    private boolean isRunning() throws Exception
    {
        Process listTasksProcess = getRuntime().exec("tasklist");
        BufferedReader tasksListReader = new BufferedReader(
                new InputStreamReader(listTasksProcess.getInputStream()));

        String tasksLine;

        while ((tasksLine = tasksListReader.readLine()) != null)
        {
            if (tasksLine.contains(processName))
            {
                return true;
            }
        }

        return false;
    }

    private Runtime getRuntime()
    {
        return Runtime.getRuntime();
    }
}
于 2015-06-15T11:10:38.487 に答える
0

Super kakesによって書かれた答えの小さな変化

private static final String KILL = "taskkill /IMF ";

に変更..

private static final String KILL = "taskkill /IM ";

/IMFオプションは機能しません.それはメモ帳を殺しません../IMオプションが実際に機能している間

于 2015-05-26T12:17:53.947 に答える
0

IMHOにはそれを行うライブラリがないため、ネイティブコードを呼び出す必要があります。JNI は扱いにくく難しいため、JNA (Java Native Access) を使用してみてください。https://jna.dev.java.net/

于 2008-09-17T10:48:12.873 に答える