48

当基于 java 的应用程序在 windows 机器上开始出现异常时,如果您无法正常退出应用程序,您希望能够在任务管理器中终止该进程。大多数时候,我的机器上运行着不止一个基于 java 的应用程序。有没有比随机杀死 java.exe 进程以希望您最终能找到正确的应用程序更好的方法?

编辑:感谢所有将我指向 Sysinternal 的 Process Explorer 的人——正是我正在寻找的东西!

4

12 回答 12

56

运行jps -lv显示所有正在运行的 Java 进程的 PID 和命令行。

确定要终止的任务的 PID。然后使用命令:

taskkill /PID <pid>

杀死行为不端的进程。

于 2008-09-15T14:57:51.697 回答
33

下载Sysinternal 的 Process Explorer。它是一个比 Windows 自己的管理器更强大的任务管理器。

它的功能之一是您可以查看每个进程正在使用的所有资源(如注册表项、硬盘目录、命名管道等)。因此,浏览每个 java.exe 进程拥有的资源可能会帮助您确定要杀死的资源。我通常通过查找使用某个日志文件目录的那个来找出答案。

于 2008-09-15T12:45:38.083 回答
32

如果您无法运行像 ProcessExplorer 这样的 GUI 应用程序并且您正在寻找进程的“命令行”参数,那么您可以通过命令行使用“wmic”。例如:

wmic PROCESS get Processid,Caption,Commandline

如果你想寻找一个特定的过程,你可以这样做:

wmic PROCESS where "name like '%java%'" get Processid,Caption,Commandline

其输出将向您显示“java”等进程的所有命令行参数。

于 2010-08-17T16:11:37.720 回答
7

在 JDK 中使用 jps 将为您提供更多信息。使用 -m、-l 和 -v 选项显示更多信息。

于 2008-09-15T12:57:17.913 回答
6

您是否尝试过使用 SysInternals 的 Process Explorer?它可以更好地了解流程中正在运行的内容。可在此处免费在线获取:http ://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

于 2008-09-15T12:42:59.477 回答
6

如果您使用的是 Java 6,请尝试jvisualvm从 JDK bin 目录。

于 2008-09-15T14:58:07.890 回答
4

您可以尝试打开 Windows 任务管理器,转到“应用程序”选项卡,右键单击该应用程序,然后选择“转到进程”。这将自动突出显示“进程”选项卡中的相应进程。

于 2008-09-15T12:49:49.820 回答
2

如果您正在开发软件:使用 java-launcher。我用于我的一些应用程序 [Exe4j][ http://www.ej-technologies.com/products/exe4j/overview.html]并且效果很好。当应用程序启动时,它在 Windows 任务管理器中被列为例如“myserverapp.exe”或“myapp”。还有其他的 lauchers (不知道他们),其中很少有可能也是免费的。

于 2008-09-15T12:50:45.823 回答
1

我建议从 Sysinternals 下载 Process Explorer 并更仔细地查看不同的 java.exe 进程,这样您就可以更好地了解要杀死哪个进程。

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

它非常直观,您可以找到 java.exe 进程并右键单击并转到它们的属性,从那里您可以看到它们的命令行、创建时间等,这可以帮助您找到要杀死的进程。

希望能帮助到你。

于 2008-09-15T12:44:15.997 回答
1

使用ProcessExplorer并将鼠标悬停在 Java 进程上将显示命令行。

于 2008-09-15T12:44:45.247 回答
1

如果应用程序根本没有响应,那么 Process Explorer 是一个不错的选择。

如果它有点响应,但没有死,有时会调出任务管理器,然后在 java 进程上移动另一个对话框会给你一个线索。占用 cpu 周期来重绘的 java 进程是您正在寻找的进程。

于 2008-09-15T12:50:45.713 回答
1

如果您大致知道系统上的各种 Java 进程是什么,那么您也可以通过查看任务管理器中的所有列来做出很好的猜测,而不是使用第三方工具。在 Processes 选项卡中,使用 View-> Select Columns 并添加 PID、CPU Time、VM Size 和 Thread count。大致了解流程在做什么应该有助于缩小范围。

例如,在客户端-服务器应用程序中,服务器可能会使用更多内存、拥有更多线程并使用更多 CPU 时间,因为它运行的时间更长。如果您因为一个进程被卡住而杀死它,那么它现在可能只是在使用更多的 CPU。

MAX java heap memory 通常直接反映在 VM Size 中。因此,如果您使用 -Xmx 标志,则具有较大设置的进程将具有较大的 VM 大小。

于 2008-09-15T14:12:17.000 回答