以编程方式终止 windows 中的 java 进程
Kill a java process in windows programmatically
我有很多可执行 jar 文件,我 运行 在 windows 服务器中。有时,我需要重新部署一些应用程序。为此,我需要先停止现有流程,然后启动新流程。
在 linux 环境中,我使用 pkill
根据 jar 文件名终止进程。但在 windows 中,所有 java 进程将仅命名为 "java.exe"。我需要编写一个批处理文件来执行此启动和停止操作。
如何根据名称kill jar文件
假设我的 jar 文件被命名为 common-api.jar
。
运行 命令 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 )
我有很多可执行 jar 文件,我 运行 在 windows 服务器中。有时,我需要重新部署一些应用程序。为此,我需要先停止现有流程,然后启动新流程。
在 linux 环境中,我使用 pkill
根据 jar 文件名终止进程。但在 windows 中,所有 java 进程将仅命名为 "java.exe"。我需要编写一个批处理文件来执行此启动和停止操作。
如何根据名称kill jar文件
假设我的 jar 文件被命名为 common-api.jar
。
运行 命令 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 )