Hvordan kan jeg programmelt lukke en SPECIFIK Java applikation, der kører i Windows fra et andet program?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skal (force) lukke en bestemt java-applikation fra et andet program. For ethvert indfødt program dræber det s process eller sender vm\_close til det s hovedvindue fungerer normalt men ikke så meget med java applikationer kører på windows. Bemærk at java-applikationen kun viser et bakkeikon og ikke har åbent vindue under dets normale tilstand.

Bedste reference


Hvis du kender dit Java-program s PID, skal du bruge dette:


Runtime.getRuntime().exec("taskkill /F /PID bla");


hvor bla er dit program s PID.


Denne /F parameter vil kraftigt dræbe en applikation, og jeg ser ikke en grund til, at et Java-program ville være anderledes end andre programmer og kunne overleve det.


Bemærk, at denne kode åbenbart er Windows-specifik. Hvis du vil have den til at være bærbar, skal du først finde ud af, hvilket OS der er vært for din ansøgning ved at bruge


System.getProperty("os.name")


og derefter bruge taskkill /F, hvis du er på Windows eller kill -9 hvis du er på et * nix-system eller noget andet, hvis du er på en mere eksotisk platform.


Opdatering : For at få et godt overblik over alle igangværende processer, anbefaler jeg 'Process explorer'. Hvis du vil have en kommandolinjeprofil, skal du bruge PsList. [12] [13]


Hvis du vil dræbe et bestemt Java-program, kan det være problematisk, da hver Java-proces som standard er navngivet java.exe eller javaw.exe.


Ved hjælp af PsList kan du scanne alle processer, der starter med java, og i kombination med jps får du mere information om, hvad du virkelig vil dræbe.

Andre referencer 1


en nem hack er at kopiere/indsætte en anden version af java.exe (eller javaw.exe), kald det java\_alt.exe og dræb processen derefter med det nye navn ved hjælp af Unix Tools til Windows

Andre referencer 2


Hvad hvis du skrev proces-id'et for java-applikationen til en tempfil på et kendt sted. Når programmet starter, skal du gøre noget som:



//mark the instance file for delete
String instanceFileLocation = System.getProperty("java.io.tmpdir") + File.separator + "instances.dat";
File PIDFile = new File(instanceFileLocation).deleteOnExit();
//write the process id here



Så kunne ethvert program eller en applikation finde tempfilen og det specifikke proces-id. Brug de andre løsninger, der er indsendt til at dræbe det.


Brug derefter