如何通过命令行的方式杀死 Java 程序?我们将面临这样的问题:
- 如何找到 Java 程序?
- 如何杀死 Java 程序?
如果它像看起来这么简单的话,我想,这篇博文就没机会与大家见面了!
找到 Java 程序比较简单,windows 的 tasklist
命令:
杀死 Java 程序也很简单:taskkill /PID 12024
12024 为
tasklist
命令查询出来的进程PID
。
但要杀死特定的 Java 程序呢?例如,启动了一个 tomcat
,只想杀死这个 tomcat
。
首先想到的是通过映像名称(tasklist
命令查询到的第一列信息),可这个 tomcat
的映像名称仍然为 java.exe
,原因很简单,本质上是通过 java
命令启动 JVM
实例运行程序,镜像名称都相同倒也正常。
网上有这样一个解法,拷贝 java.exe
,重新命名为你想要的镜像名称,然后使用这个新的 java.exe
程序来启动 tomcat
,这样就会得到想要的镜像名称。
自己思索了下,这种方法于我有些不便,每启动一个特定镜像名称的 Java 程序,需要复制一份新的文件(JDK文件夹下便会存在很多这样的文件),同时,也需要考虑什么时候删除这份文件。
处女座的程序开始较真了!
警告:以下内容请谨慎食用,劲别用过了!
查看 tasklist
的命令,发现可以使用 tasklist -V
获得比较特殊的一列数据:窗口标题。幸运的是窗口标题可以在启动程序时指定。
通过
start "title" java ...
来为运行的 Java 程序指定窗口标题。
所以查找特定进程可以结合管道使用如下命令: tasklist -V | findstr "title"
。
那么、杀死进程呢?命令行窗口很好解决,直接拷贝查询到的 PID
。如果在批处理程序中呢?可以使用如下方式:
REM kill if specific Java program already exists
for /F "usebackq tokens=1,2* delims= " %%i in (`tasklist -v ^| findstr "title"`) do
(
echo kill PID=%%j
taskkill /PID %%j >& 2
)
注意:这段脚本会杀死模糊匹配到的所有进程,所以这里有个建议,将窗口标题使用 ”唯一字符串“+”title“ 的方式,这样能够避免殃及无辜。
至此,问题分析完毕,解决完毕!
我与风来
如果你觉得我的文章对你有所帮助的话,欢迎关注我的公众号。赞!
认认真真学习,做思想的产出者,而不是文字的搬运工。错误之处,还望指出!