知道在 Windows 机器上要杀死哪个 java.exe 进程[关闭]

Posted

技术标签:

【中文标题】知道在 Windows 机器上要杀死哪个 java.exe 进程[关闭]【英文标题】:Knowing which java.exe process to kill on a windows machine [closed] 【发布时间】:2008-09-15 12:41:13 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

taskkill /PID <pid>

杀死行为不端的进程。

【讨论】:

使用此命令杀死而不需要 taskkill:jps -lv |找到“东西” | WMIC PROCESS where name="java.exe" 删除 我喜欢这个答案。遗憾的是,虽然 jps 没有随 JRE 一起分发,但这是我想使用它的地方的限制。【参考方案2】:

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

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

【讨论】:

进程资源管理器还可以显示启动 java.exe 进程的命令。这通常包含 jar 文件的名称或类的名称。 是否有适用于 Linux (Ubuntu) 的类似工具? @Ivan 我认为htop 可以胜任。【参考方案3】:

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

wmic PROCESS get Processid,Caption,Commandline

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

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

此输出将显示所有进程的命令行参数,例如“java”。

【讨论】:

这是最好的方法,因为您可以使用“FIND.exe”过滤此列表,然后将其通过管道传送到“WMIC ....delete”以终止进程。这是一个“纯粹”的解决方案,不需要任何外部程序。 使用/format:list 标志可以使输出更具可读性(例如,当Commandline 很长时)。【参考方案4】:

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

【讨论】:

jps 很棒。此解决方案将允许您在 Process Explorer 不会杀死的脚本中杀死相关的 Java 进程。【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

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

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

希望对你有帮助。

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

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

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

【讨论】:

【参考方案12】:

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

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

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

【讨论】:

以上是关于知道在 Windows 机器上要杀死哪个 java.exe 进程[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

windows环境 查看端口被哪个进程占用 并杀死进程 netstat/tasklist/taskkill

真正杀死Windows中的进程

危险!VS Code 杀死 IDEA?!

危险!VS Code 杀死 IDEA?!

如何使用python杀死资源消耗不变的Windows进程?

在windows中使用管道和taskkill用pid杀死进程