知道在 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 进程[关闭]的主要内容,如果未能解决你的问题,请参考以下文章