# cmd aus java starten; prozess beenden



## norman (4. Okt 2005)

hallo zusammen,
soweit mein test:


```
public static void main(String args[]) throws IOException {
		
//		Process p1 = Runtime.getRuntime().exec("C:/WINDOWS/system32/cmd.exe");
		Process p2 = Runtime.getRuntime().exec("C:/Programme/Mozilla Firefox/firefox.exe");
		for (int i=0; i<50000;i++) System.out.println(i);
		p2.destroy();
	}
```
hierzu habe nun aber 2 Fragen:
1.) warum startet p1 nicht? (ohne die //) bzw. wie kann ich die cmd offenhalten, falls sie startet? dachte an ein einfaches "pause" .. aber wie kann ich aus java was in die sich dann hoffentlich geöffnete cmd übergeben?
2.) warum schließt der firefox nicht nachdem die schleife fertig durchlaufen ist?

vielen dank im voraus )


----------



## dotlens (4. Okt 2005)

cmd kannst so starten:

```
Process p1 = Runtime.getRuntime().exec("cmd /C start");
```


----------



## Sky (4. Okt 2005)

1. ) 
	
	
	
	





```
Process p1 = Runtime.getRuntime().exec("cmd /c start");
```

2.) hast Du wirklich bis 50'000 gewartet ? Wenn man es auf 5'000 gesetzt und hatte keine Probleme!


----------



## norman (4. Okt 2005)

danke, konsole bleibt dann jetzt offen )

die 50.000 sind doch in paar sekunden erreicht :/ wenn ich gleich p1.destroy() mache, geht die cmd garnicht erst auf

nach der schleife schließt sie sich nun aber trotzdem nicht..
(und: kann ich cmd-befehle aus java abschicken?)


----------



## The_S (4. Okt 2005)

1. Warum ne Schleife wenns Thread.sleep(long) gibt?
2. 
	
	
	
	





```
Runtime.getRuntime().exec("cmd /c cmd-befehl");
```


----------



## norman (4. Okt 2005)

1. warum einfach wenns auch umständlich geht? naja, habs mal ersetzt..

2. okay..aber was wenn ich mehrere befehle habe, zwischendrin aber anderwaltigen code und evtl. dynamische befehle?
muss ich dazu jedesmal die konsole neu öffnen? (und vorher schließen)

ach ja..und wie beende ich die konsole nun? mit desroy gehts ja nicht..


----------



## Mag1c (4. Okt 2005)

Hi,

an das über start geöffnete Konsolenfenster kommst du so ohne weiteres nicht mehr ran.

Befehle ausführen kannst du

a) wie Hobbit beschrieben hat über cmd /c

b) Process p = Runtime.getRuntime().exec("cmd");
von p kann man sich nun InputStream, OutputStream und ErrorStream holen. Über diese lässt sich die Konsole steuern, man sieht nur das Fenster nicht.

Gruß
Mag1c


----------



## The_S (4. Okt 2005)

2. hä?
3. dann bau in deine Konsole noch nen "start" ein, dann beendet sie sich auf jedenfall wieder von alleine (oder hab ich das jetzt missverstanden)


----------



## norman (4. Okt 2005)

danke @ mag1c )

hobbit: ich dachte, mit

```
Process p1 = Runtime.getRuntime().exec("C:/WINDOWS/system32/cmd.exe /C start");
Thread.sleep(1000);
p1.destroy();
```
sollte die konsole dann wieder schließen..tut sie aber nicht :/


----------



## Mag1c (4. Okt 2005)

Hi,



			
				norman hat gesagt.:
			
		

> sollte die konsole dann wieder schließen..tut sie aber nicht :/



tut sie doch  :roll: Die von dir gestartete cmd.exe tut nichts weiter als eine neue cmd.exe zu starten. D.h. vor deinem destroy() hat sich die cmd.exe schon wieder selbst beendet. Das Fenster, was du siehst, ist eine neue Instanz von cmd.exe die im Prozess-Baum direkt unter dem explorer liegt. Deshalb schrieb ich gerade schon, daß du da nicht mehr so ohne weiteres rankommst.

Gruß
Mag1c


----------



## norman (4. Okt 2005)

ahhhhhh *lichtaufgeht*

nunja..äh...mir fällt gerade ein, ich muss wegen eines wichtigen termins dringen weg.............................


----------



## The_S (4. Okt 2005)

norman hat gesagt.:
			
		

> nunja..äh...mir fällt gerade ein, ich muss wegen eines wichtigen termins dringen weg.............................



??? ???:L


----------

