実行可能ファイルの名前を知っている実行中の Win プロセスを見つける Java の方法が必要です。現在実行されているかどうかを確認したいのですが、見つかった場合はプロセスを強制終了する方法が必要です。
8 に答える
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);
}
}
コマンドラインウィンドウツールtasklist
をtaskkill
使用して、を使用してJavaから呼び出すことができますRuntime.exec()
。
SysInternals PsKillやSysInternals PsListなどのプロセスを強制終了するコマンド ライン ツールを使用できます。
組み込みの tasklist.exe と taskkill.exe を使用することもできますが、これらは Windows XP Professional 以降でのみ使用できます (Home Edition では使用できません)。
プログラムを実行するには、java.lang.Runtime.execを使用します。
次のクラスを使用して、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();
}
}
Super kakesによって書かれた答えの小さな変化
private static final String KILL = "taskkill /IMF ";
に変更..
private static final String KILL = "taskkill /IM ";
/IMF
オプションは機能しません.それはメモ帳を殺しません../IM
オプションが実際に機能している間
IMHOにはそれを行うライブラリがないため、ネイティブコードを呼び出す必要があります。JNI は扱いにくく難しいため、JNA (Java Native Access) を使用してみてください。https://jna.dev.java.net/