1

基本的に、start->accessories->notepad に移動してメモ帳を起動すると、Java プログラムはこれを閉じる必要があります。出来ますか?Javaでない場合、他の言語はありますか?

4

2 に答える 2

6

プロセスの PID がわかっている場合は、以下のコードを使用して Java からアプリケーションを強制終了します。

Runtime.getRuntime().exec("taskkill /F /PID <process_id>");

ここで、はプロセス ID、/F は強制終了に使用されます。これは、Windows を使用している場合にのみ機能することに注意してください。

ここから、これを拡張して、プロセス ID を動的に取得し、ハードコーディングの代わりに強制終了することができます。

システム プロパティos.nameを使用して、OS の名前を取得し、それに応じてコマンドを変更できます。

于 2013-01-15T15:13:02.713 に答える
2

上記の投稿に加えて、このコードで PID を除外できます (もっと簡単に機能するかどうかはわかりません)。

このコードはすべてのプロセスを一覧表示し、必要に応じて特定のプロセスを除外できます。

package runtime;

import java.util.Scanner;

public class Process_Check {

 public static void main(String[] args) throws Exception {
        Processes.ALL_PROCESSES.listProcesses();
   }
 public static enum Processes implements IProcessListingStrategy {
        ALL_PROCESSES;

        private IProcessListingStrategy processListing = selectProcessListingStrategy();

        public void listProcesses() throws Exception {
            processListing.listProcesses();
        }

        private IProcessListingStrategy selectProcessListingStrategy() {
            //todo add support for mac ...
            return isWindows() ? new WinProcessListingStrategy() : new LinuxProcessListingStrategy();
        }

        private static boolean isWindows() {
            return System.getProperty("os.name").toLowerCase().indexOf("win") >= 0;

        }
    }

    static interface IProcessListingStrategy {
        void listProcesses() throws Exception;
    }

    static abstract class AbstractNativeProcessListingStrategy implements IProcessListingStrategy {
        public void listProcesses() throws Exception {
            Process process = makeProcessListingProcessBuilder().start();
            Scanner scanner = new Scanner(process.getInputStream());
            while (scanner.hasNextLine()) {
                System.out.println(scanner.nextLine());
            }
            scanner.close();
            process.waitFor();
        }

        protected abstract ProcessBuilder makeProcessListingProcessBuilder();
    }
    static class WinProcessListingStrategy extends AbstractNativeProcessListingStrategy {
        @Override
        protected ProcessBuilder makeProcessListingProcessBuilder() {
            return new ProcessBuilder("cmd", "/c", "tasklist");
        }
    }

    static class LinuxProcessListingStrategy extends AbstractNativeProcessListingStrategy {
        @Override
        protected ProcessBuilder makeProcessListingProcessBuilder() {
            return new ProcessBuilder("ps", "-e");
        }
    }
}
于 2013-01-15T15:17:40.567 に答える