从Java关闭另一个应用程序,但不是由当前Java应用程序启动 3 月,4 周 Questions & Answers 1701 基本上,如果我启动记事本,开始->;配件->;记事本然后我的Java程序应该关闭这个。 可能吗? 如果不是Java语言,还有其他语言吗
# 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 楼答案 如果您知道某个进程的PID,请使用以下代码从Java终止应用程序: Runtime.getRuntime().exec("taskkill /F /PID <process_id>"); 其中,是进程id,/F用于强制终止。注意:只有在使用windows时,此功能才有效 从这里,您可以扩展它来动态地获取进程id,并终止它,而不是硬编码 使用系统属性os.name可以获得操作系统的名称并相应地更改命令
# 1 楼答案
除了上面的帖子,你还可以用这段代码过滤掉PID(不知道它是否能工作得更简单)
这段代码确实列出了所有进程,如果需要,您可以过滤掉一些特定的进程
# 2 楼答案
如果您知道某个进程的PID,请使用以下代码从Java终止应用程序:
其中,是进程id,/F用于强制终止。注意:只有在使用windows时,此功能才有效
从这里,您可以扩展它来动态地获取进程id,并终止它,而不是硬编码
使用系统属性
os.name
可以获得操作系统的名称并相应地更改命令