有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    除了上面的帖子,你还可以用这段代码过滤掉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");
            }
        }
    }
    
  2. # 2 楼答案

    如果您知道某个进程的PID,请使用以下代码从Java终止应用程序:

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

    其中,是进程id,/F用于强制终止。注意:只有在使用windows时,此功能才有效

    从这里,您可以扩展它来动态地获取进程id,并终止它,而不是硬编码

    使用系统属性os.name可以获得操作系统的名称并相应地更改命令