Avatar billede luctatic Nybegynder
18. januar 2006 - 21:30 Der er 9 kommentarer

external application from java

Jeg sidder og leger lidt med at kunne genstarte visse processer på min server fra en webside via JSP. Jeg prøver at starte den via:

Process p = Runtime.getRuntime().exec("c:\\file.bat");


Men hvis jeg gør det, så er processen jo en del af min serverthread vel sagtens, og jeg ville helst have filen kørt i et eksternt vindue. I dette tilfælde er det en batch fil som skal lave en masse ting og læse input fra en socketstream, hvor jeg gerne ville se hvad input den læser i en console - men starter jeg den via linien ovenfor, så starter processen bare skjult.

Så spørgsmålet er lidt to-delt.

1) er det muligt at starte en process i sit eget vindue/console?

2) kan man dræbe en process der bare kører på maskinen selvom den ikke er startet via JVM'en? Måske finde den ud fra navn/PID?
Avatar billede arne_v Ekspert
18. januar 2006 - 21:57 #1
det er en seperat tråd og derfor ikke en del af din server tråd - ikke engang en del
af din server process

re 1)

prøv med

Process p = Runtime.getRuntime().exec("start c:\\file.bat");

re 2)

Kun via noget JNI som kalder noget C/C+ kode
Avatar billede arne_v Ekspert
18. januar 2006 - 21:58 #2
virker

Process p = Runtime.getRuntime().exec("c:\\file.bat");

?

jeg ville have troet at du skulle

Process p = Runtime.getRuntime().exec("cmd /c c:\\file.bat");
Avatar billede luctatic Nybegynder
19. januar 2006 - 10:17 #3
Process p = Runtime.getRuntime().exec("c:\\file.bat");

virker faktisk fint. Men jeg vil prøve når jeg kommer hjem i aften om enten "cmd /c c:\\file.bat" eller "start c:\\file.bat" sender den ud i console.



Det er dog lidt trist at jeg ikke kan komme til at dræbe en kørende process hvis jeg vil have den genstartet af den ene eller anden grund.
Avatar billede arne_v Ekspert
19. januar 2006 - 14:09 #4
saa skal du igang med noget JNI

mange server apps har en management port som man kan connecte til og sende
en shutdown kommando
Avatar billede luctatic Nybegynder
19. januar 2006 - 14:52 #5
Det er så dog ikke en server apps som sådan - det er en application jeg selv har lavet som nogle gange laver en timeout. Og så er det jo behageligt hvis jeg kunne restarte den uden at jeg behøvede logge ind på serveren via RDP/VNC.

Men jeg må kigge på JNI, og ellers ændre min application til at modtage en kill command eller noget. Og så tester jeg dit svar til 1) når jeg kommer hjem.
Avatar billede luctatic Nybegynder
19. januar 2006 - 18:36 #6
Ok, så er det lige testet.

Process p = Runtime.getRuntime().exec("start c:\\stats-cod.bat");


Virker ikke. Den skriver "java.io.IOException: CreateProcess: start c:\file.bat error=2", når jeg laver e.printStackTrace();

Om jeg så bruger "cmd /k c:\\file.bat" eller bare "c:\\file.bat" gør ingen forskel. Den starter stadig ikke op i noget vindue, og viser sig kun som endnu en java.exe process der kører - og ikke som en cmd.exe som jeg ville have haft.
Avatar billede arne_v Ekspert
19. januar 2006 - 20:00 #7
proev:

cmd /c start ...
Avatar billede luctatic Nybegynder
19. januar 2006 - 21:06 #8
Jeg fik den vendt om og fik batchfilen til at starte med start, så gik det. Og shutdown måtte jeg lave i shellscripting, og jeg må så finde mig i at det ikke er 100% OS independant.
Avatar billede luctatic Nybegynder
20. januar 2006 - 12:12 #9
Lukker spørgsmål - fik det ca måske næsten løst via en omvej og ved at gøre noget andet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester