# auf gestarteten Process warten



## MQue (10. Jun 2009)

hallo,

steh mom. an, wie kann ich warten bis ein Prozess gestartet ist, mit der unteren Zeile starte ich meinen Process aber dann werden gleich die nächsten paar Zeilen ausgeführt, dass sollte aber erst geschehen wenn eben der Process gestartet ist,
Vielleicht kann mir da jemand auf die Sprünge helfen,

ist es auch irgendwie möglich, herauszufinden ob der Prozess, den ich mit der unteren Zeile starten möchte, schon gestartet ist?

Vielen Dank,



```
final Process process = Runtime.getRuntime().exec(command + " " + cfgFile);
```


----------



## Wildcard (10. Jun 2009)

Gestartet ist er, nur eben nicht fertig. Um darauf zu warten das er fertig ist: process.waitFor()


----------



## MQue (12. Jun 2009)

Wildcard hat gesagt.:


> Gestartet ist er, nur eben nicht fertig. Um darauf zu warten das er fertig ist: process.waitFor()



ich hab mir gerade die Beschreibung von waitFor angesehen und da steht viel von terminieren, jetzt weiß ich nicht, ob dass das richtige ist, ich möchte in meiner Methode (startServer) einfach den Server starten, und wenn dieser fertig ist mit dem Starten, dann weiter im Programm, 
Versteh ich da was falsch?
Wenn ich das Programm jetzt ausführe, dann funktioniert das, was nach startServer passieren soll, nicht mehr, obwohl der externe Server schon gestartet ist.

Vielen Dank für die Hilfe,
lg


```
* causes the current thread to wait, if necessary, until the 
     * process represented by this <code>Process</code> object has 
     * terminated. This method returns 
     * immediately if the subprocess has already terminated. If the
     * subprocess has not yet terminated, the calling thread will be
     * blocked until the subprocess exits.
```


```
public boolean startServer(final String command, final String cfgFile) {
        boolean started = false;
        if(command.equals("") || cfgFile.equals(""))
            return started;
        try {
            final Process process = Runtime.getRuntime().exec(command + " " + cfgFile);
            process.waitFor();
            started = true;
            }
        catch (Exception ex) {
            System.out.println("Ausnahme Methode startServer: " + ex);
            }
        return started;
        }
```


----------



## Wildcard (12. Jun 2009)

Der Prozess wird dir aber keine Rückmeldung geben wenn er fertig mit hochfahren ist. Der Prozess läuft einfach weiter. (Prozess starten != Server hochfahren).
Du könntest höchstens den Output Stream des Prozesses lesen falls dort eine Meldung kommt sobalb er bereit ist.


----------



## MQue (12. Jun 2009)

Wildcard hat gesagt.:


> Der Prozess wird dir aber keine Rückmeldung geben wenn er fertig mit hochfahren ist. Der Prozess läuft einfach weiter. (Prozess starten != Server hochfahren).
> Du könntest höchstens den Output Stream des Prozesses lesen falls dort eine Meldung kommt sobalb er bereit ist.



also dann gibts keine Möglichkeit, um zu warten, bis der Server hochgefahren ist, 
wie kann man das am Besten machen?
Wenn der Server nicht hochgefahren ist, nutzt mir mein ganzes weiteres Programm nichts ???:L


----------



## Wildcard (12. Jun 2009)

Nein, weil der Prozess nichts darüber weiß wann der Server sich als hochgefahren bezeichnet, also kann man das auch nicht abfragen. Also entweder du wertest den Output Stream aus und wartest auf eine Statusmeldung, oder du versuchst einfach alle paar sekunden dich zu verbinden.


----------



## MQue (15. Jun 2009)

Hallo,

muss nochmal auf meine Frage zurückkommen, kann man eigentlich mit java aus der StandardAPI heraus schauen, ob auf einem Windows Rechner ein Task mit dem Namen xy schon läuft? 

Vielen Dank,


----------



## kulri (15. Jun 2009)

ja kann man. ruf über die cmd den befehl "tasklist" auf und hol dir die Ausgabe.

```
Process p = Runtime.getRuntime().exec("tasklist");
p.getInputStream();
```
Und den InputStream kannst jetzt nach deinem xy-task durchsuchen
Wie die .exec() genau funzt musste aber selber nachschaun.


----------

