ProcessBuilder startet Linux Shell-Skript als Vater-/Kindprozess

Studdi23

Grünschnabel
Hallo zusammen,

ich habe ein Shell-Skript (rserve.sh) das bei Ausführung einen Server startet. Wenn ich das Skript manuell über die Konsole aufrufe und mir mittels "ps -ef" die Prozesse ausgeben lasse, erscheint genau ein laufender Server-Prozess:

PHP:
root     25370     1  0 08:52 ?        00:00:00 /usr/lib/R/site-library/Rserve/libs//Rserve-bin.so --no-save

Soweit so gut. Nun versuche ich das Skript mit Java's ProcessBuilder folgendermaßen aufzurufen:

Code:
ProcessBuilder pb = new ProcessBuilder("/bin/sh", "rserve.sh");
pb.directory(new File("/rserve"));
p = pb.start();
int exitValue = p.waitFor();

Die Ausführung des Skripts funktioniert auch, nur werden in diesem Fall zwei Prozesse (Vater/Kind) angestossen:

PHP:
root     25118     1  0 08:50 ?        00:00:00 /usr/lib/R/site-library/Rserve/libs//Rserve-bin.so --no-save
root     25121 25118  0 08:50 ?        00:00:00 /usr/lib/R/site-library/Rserve/libs//Rserve-bin.so --no-save

Das ist deshalb ein Problem, weil die waitFor() Methode nicht auf die Beendigung des Prozesses startet sondern direkt mit exitValue 0 weiterläuft. Ich möchte aber das der Thread der den Server startet, solange wartet bis der Prozess terminiert. Das tut er offensichtlich deswegen nicht weil der mit dem ProcessBuilder gestartete Prozess einen weiteren Kindprozess startet, welcher das Skript ausführt und anschließend ein Signal an Java zurückgibt, dass der eigentliche Prozess beendet wurde. Weiß jemand woran das liegen könnte? Gibt es vielleicht einen Parameter den man dem Skript übergeben kann, der Linux anweist nur einen Prozess zu starten oder sowas in der Art?
 

Neue Beiträge

Zurück