繁体   English   中英

以编程方式杀死Windows中的Java进程

[英]Kill a java process in windows programmatically

我有很多在Windows服务器中运行的可执行jar文件。 有时,我需要重新部署一些应用程序。 为此,我需要先停止现有过程,然后再开始新过程。 在linux环境中,我使用pkill杀死基于jar文件名的进程。 但是在Windows中,所有Java进程将仅被命名为“ java.exe”。 我需要编写一个批处理文件来执行此启动和停止操作。 如何根据名称杀死jar文件。

假设我的jar文件名为common-api.jar 运行命令jps -ml | find "common" jps -ml | find "common"将得到结果为

6968 common-api.jar

我可以通过taskkill /f /PID 6968该进程

但是,如何从第一个命令中提取进程ID并将其传递给taskkill命令?

for /f "delims= " %%a in ('jps -ml ^| find /i "common"') do set PID=%%a
taskkill /f /PID %PID%

或从命令提示符下:

for /f "delims= " %a in ('jps -ml ^| find /i "common"') do set PID=%a

在vbscript中,我们可以尝试执行以下操作:

Option Explicit
Call KillProcessbyName("common-api.jar")
'**********************************************************************************************
Sub KillProcessbyName(FileName)
    On Error Resume Next
    Dim WshShell,strComputer,objWMIService,colProcesses,objProcess
    Set WshShell = CreateObject("Wscript.Shell")
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
    For Each objProcess in colProcesses
        If InStr(objProcess.CommandLine,FileName) > 0 Then
            If Err <> 0 Then
                MsgBox Err.Description,VbCritical,Err.Description
            Else
                objProcess.Terminate(0) 
            End if
        End If
    Next
End Sub
'**********************************************************************************************

只要这样做:

for /f "tokens=1" %%A in ('jps -ml ^| find "common"') do (taskkill /F /PID %%A )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM