我使用Java 7 32位Windows:
如何在Windows 7中通过命令行获取进程的PID?
我想杀死一个我只能通过运行它的命令行真正识别的应用程序。我们在该计算机上运行了几个Java应用程序。我需要停止特定的。
确切地说:我需要找到由catalina.bat
运行的tomcat。您认为最好的方法是什么?
我知道tasklist,但它似乎无法查询启动进程的命令行。查找java.exe
对我没有帮助。我尝试在Windows上搜索像pgrep / pkill这样有用的东西,但没有成功。
答案 0 :(得分:8)
您可以使用jps -lv
命令通过命令行选项确定java进程。 jps是包含在许多最新JDK中的实用程序。
答案 1 :(得分:3)
尝试命令提示符:
sc queryex type= service state= all | find "APP"
APP是程序的名称。此命令将返回与该匹配的所有服务。
然后你可以运行SC QUERYEX APP
,它将返回状态和PID号。
获得PID后:
TASKKILL /f /pid ###
其中###是实际PID
答案 2 :(得分:3)
Java,获取Windows中当前正在运行的进程的PID
这适用于Linux
,OSX
,Windows
和HotSpot JVM。
import sun.management.VMManagement;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public static int getCurrentPID() {
try{
java.lang.management.RuntimeMXBean runtime =
java.lang.management.ManagementFactory.getRuntimeMXBean();
java.lang.reflect.Field jvm = runtime.getClass().getDeclaredField("jvm");
jvm.setAccessible(true);
sun.management.VMManagement mgmt =
(sun.management.VMManagement) jvm.get(runtime);
java.lang.reflect.Method pid_method =
mgmt.getClass().getDeclaredMethod("getProcessId");
pid_method.setAccessible(true);
return (Integer) pid_method.invoke(mgmt);
}
catch(Exception e){
e.printStackTrace();
System.out.println("Failed at getting the process ID");
System.exit(0);
}
}
像这样调用它:
System.out.println("PID: " + getCurrentPID());
对我来说,它打印出processID:PID: 5728
来源:
How can a Java program get its own process ID?
http://boxysystems.com/index.php/java-tip-find-process-id-of-running-java-process/
答案 3 :(得分:1)
如果你只需要从java应用程序中杀死一个特定的tomcat,为什么不编写一个在每个tomcat中运行的简单servlet,它将响应一个带有识别它的字符串的get请求。然后使用另一个servlet执行类似的操作:
System.exit(-1);
答案 4 :(得分:0)
终于找到了一些东西。为我工作的解决方案称为wmic(Windows Management Instrumentation Commandline)。这个漂亮的工具内置于Windows 7 Pro(我的)以及其他Windows版本。它提供了各种各样的操作,例如列出所有正在运行的任务以及您可以想象的每个细节(如相应的命令行),各种硬件信息等。正是我需要的。