ProcessBuilder

Status
Nicht offen für weitere Antworten.

nameac

Bekanntes Mitglied
Hallo,

wenn ich mittels der Methode directory ein Verzeichnis angebe, kann der Process den ich starten möchte nicht mehr ausgeführt werden.
Code:
List<String> tshark_command = new ArrayList<String>();
	tshark_command.add("tshark");
	tshark_command.add("-i");
	tshark_command.add("en0");

builder.directory(new File("/Applications/eclipse/workspace/PerfTool/progs"));

Feher:

java.io.IOException: tshark: not found
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:52)
at java.lang.ProcessImpl.start(ProcessImpl.java:91)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
at StartCommand.run(StartCommand.java:38)
at java.lang.Thread.run(Thread.java:613)


Wenn ich es allerdings so starte:
Code:
tshark_command.add("/Applications/eclipse/workspace/PerfTool/progs/tshark");
	tshark_command.add("-i");
	tshark_command.add("en0");
        //tshark_command.add("-w");
	//tshark_command.add("tshark.txt");
       //tshark_command.add("/Applications/eclipse/workspace/PerfTool/progs/tshark.txt");

Das Problem hierbei ist aber das ich gerne mehr als nur 2 Argumente übergeben würde was auch nicht klappt. Tshark startet nicht mehr wenn ich noch andere Argumente hinzufüge.

Weiß da jemand weiter, ich kann mir das nicht erklären wo ich den Fehler suchen soll?
 
Probier mal
Code:
StringBuilder builder = new StringBuilder();
builder.add("/Applications/eclipse/workspace/PerfTool/progs/tshark ");//Leerzeichen am Ende nicht vergessen
builder.add("-weiteresArgument "); //Leerzeichen am Ende!!

Runtime.getRuntime().exec(builder.toString());
 
funzt aber ein problem hab ich noch und zwar wenn man den output von tshark in eine datei umlenken will, benutzt man
">output". jetzt könnte man mittels OutputSream die Sachen direkt in java verarbeiten, aber weil tshark die statistiken erst erstellt wenn es ein kill signal erhält heißt das das der OutputStream geschlossen ist bevor tshark die letzten Zeilen geschrieben hat.

in php kann man einen System befehl absetzen, wo ">output" interpretiert wird, geht das auch in java?
 
ich habe es mit -w output in der Argumentenliste von tshark versucht, so das er die ganzen Informationen im pcap Format speichert. Das Java Programm beendet sich noch aber tshark schließt sich nicht mehr. Warum ist das so?
 
Verstehe jetzt nicht genau, was du meinst.
Wenn du den Programmoutput in eine Datei umlenken willst, mach doch folgendes (Code ohne Garantie):
Code:
Process p = Runtime.getRuntime().exec("...");
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
PrintStream stream = new PrintStream(new FileOutputStream("datei.log"));
String s;
while ((s = reader.readLine()) != null)
 stream.println(s);
stream.close();
 
das Problem dabei ist; das tshark die Capture Statistik erst in die Datei oder in dem Fall den den Inputstream schreibt, wenn man das Signal stop Capture an tshark schickt. Bisher kenn ich nur die üblichen Signale wie kill -2 und kill -15 die den capture vorgang beenden, ist das selbe wie destroy();. Wenn man jetzt mittels destroy tshak beendet, werden vorher automatisch die In- und OutputStreams geschlossen bevor das kill signal an tshark geschickt wird, somit schreibt tshark seine statistik vll noch in den gleichen Buffer aber den kann ich nicht mehr mit dem InputStream des Processes auslesen. Ich kann nur alle Daten auslesen die vor dem kill Signal geschrieben wurden.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben