ungepufferter Process.getInputStream

G

Gast2

Gast
Moin,

wie schon im Titel ... ich brauche den ungepufferten InputStream vom gestarteten Prozess

Java:
        try {
            Runtime rtm = Runtime.getRuntime();
            Process process = rtm.exec("ufoded");
            (new Thread(new STDOUT(process))).start();
            (new Thread(new STDIN (process))).start();
            int returnWert = process.waitFor(); // holt den Rückgabewert des Bereits beendeten
            ende = true;
            logsys.info("'ufoded' beendet mit: " + returnWert);
        } catch (Exception ex) {
            logsys.error(ex.getMessage());
        }

Java:
    private class STDOUT implements Runnable
    {
        private Process process;
        public STDOUT(Process process)
        {
            this.process = process;
        }
        public void run() {
            logsys.info("starte mit Ausgabe von 'ufoded'");
            while(!ende) try {
                StringBuilder sb = new StringBuilder();
                while(true)
                {
                    if (ende) break;
                    int c = process.getInputStream().read();
                    if (c == 0x0a) break;
                    if (c == 0x0d) continue;
                    sb = sb.append((char)c);
                }
                if (!ende) logout.info(sb.toString());
            } catch (Exception ex) {
                logout.error(ex.getMessage());
            }
        }
    }

Code:
process.getInputStream()
liefert, entgegen der API, einen BufferedInputStream ... damit wird durch die Pufferung wird nicht die aktuelle Zeile zurück geliefert, sondern erst wenn genügend im Puffer vorhanden ist ... sowie ich über (die hier nicht vorhanden Klasse) STDIN "quit" an den Server liefere wird die Console geleert und ich habe alle Zeilen die ich brauche ... bringt mir aber nicht wirklich was - der Server ist ja wieder beendet

Wie kann ich den BufferedInputStream umgehen um direkten Zugriff auf die aktuellen Daten zu erhalten ??

hand, mogel
 

tagedieb

Top Contributor
model hat gesagt.:
einen BufferedInputStream ... damit wird durch die Pufferung wird nicht die aktuelle Zeile zurück geliefert, sondern erst wenn genügend im Puffer vorhanden ist

Falsch, solange was im Puffer ist kannst du es immer auslesen, auch wenn es nur 1 Zeichen ist. Wenn noch nichts im Puffer steht liegt es daran, dass der Process noch nichts geschickt hat, da nuetzt dir auch ein unbuffered Inputstream nichts.

Process.class hat gesagt.:
Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, and even deadlock.

Wenn du keinen Buffered Streams verwendest wuerden deine Processe ganz schnell blocken.

PS. StdErr muss auch ausgelesen werden
 

André Uhres

Top Contributor
Hallo mogel,

eigentlich erlaubt die Pufferung ja mehr Funktionalität und sie nimmt keine weg. Daher vestehe ich dein Problem nicht wirklich. Wird etwa hier nicht alles gedruckt:
Java:
                    if (!ende) {
                        System.out.println(sb);
                    }
?
Eine Pufferung wird übrigens in der API nicht ausgeschlossen: Implementation note: It is a good idea for the input stream to be buffered.

Gruß,
André

PS: der error stream muss auch geleert werden, wie tagedieb schon sagte, sonst kann er das Ding blockieren. Hier ist eine kleine Demo: RuntimeDemo - Byte-Welt Wiki
 
Zuletzt bearbeitet:
G

Gast2

Gast
eigentlich erlaubt die Pufferung ja mehr Funktionalität und sie nimmt keine weg. Daher vestehe ich dein Problem nicht wirklich. Wird etwa hier nicht alles gedruckt:
nein - leider nicht ... ich starte und lese entsprechend aus ... dabei kommt das raus

Code:
2011-01-04 10:26:03,242 INFO  sys - starte mit Ausgabe von 'ufoded'
2011-01-04 10:26:03,242 INFO  sys - starte mit Eingabe von 'ufoded'
2011-01-04 10:26:03,243 INFO  sys - starte mit Fehler von 'ufoded'
2011-01-04 10:26:03,444 INFO  >>> - 
2011-01-04 10:26:03,444 INFO  >>> - ---- filesystem initialization -----
2011-01-04 10:26:03,445 INFO  >>> - Adding game dir: /usr/share/games/ufoai/base
2011-01-04 10:26:03,445 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0base.pk3 (9 files)
2011-01-04 10:26:03,445 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0maps.pk3 (544 files)
2011-01-04 10:26:03,445 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0materials.pk3 (45 files)
2011-01-04 10:26:03,445 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0media.pk3 (10 files)
2011-01-04 10:26:03,446 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0models.pk3 (2015 files)
2011-01-04 10:26:03,446 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0music.pk3 (49 files)
2011-01-04 10:26:03,446 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0pics.pk3 (2114 files)
2011-01-04 10:26:03,446 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0shaders.pk3 (26 files)
2011-01-04 10:26:03,450 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0snd.pk3 (266 files)
2011-01-04 10:26:03,450 INFO  >>> - Added packfile /usr/share/games/ufoai/base/0ufos.pk3 (97 files)
2011-01-04 10:26:03,450 INFO  >>> - Adding game dir: ./base
2011-01-04 10:26:03,450 INFO  >>> - Added packfile ./base/0base.pk3 (9 files)
2011-01-04 10:26:03,451 INFO  >>> - Added packfile ./base/0maps.pk3 (544 files)
2011-01-04 10:26:03,451 INFO  >>> - Added packfile ./base/0materials.pk3 (45 files)
2011-01-04 10:26:03,451 INFO  >>> - Added packfile ./base/0media.pk3 (10 files)
2011-01-04 10:26:03,451 INFO  >>> - Added packfile ./base/0models.pk3 (2015 files)
2011-01-04 10:26:03,451 INFO  >>> - Added packfile ./base/0music.pk3 (49 files)
2011-01-04 10:26:03,451 INFO  >>> - Added packfile ./base/0pics.pk3 (2114 files)
2011-01-04 10:26:03,451 INFO  >>> - Added packfile ./base/0shaders.pk3 (26 files)
2011-01-04 10:26:03,451 INFO  >>> - Added packfile ./base/0snd.pk3 (266 files)
2011-01-04 10:26:03,451 INFO  >>> - Added packfile ./base/0ufos.pk3 (97 files)
2011-01-04 10:26:03,451 INFO  >>> - Adding game dir: /home/mogel/.ufoai/2.3.1/base
2011-01-04 10:26:03,451 INFO  >>> - using /home/mogel/.ufoai/2.3.1/base for writing
2011-01-04 10:26:03,451 INFO  >>> - executing default.cfg
2011-01-04 10:26:03,451 INFO  >>> - executing dedconfig.cfg
2011-01-04 10:26:03,451 INFO  >>> - 
2011-01-04 10:26:03,451 INFO  >>> - ----- network initialization -------
2011-01-04 10:26:03,451 INFO  >>> - libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18 initialized.
2011-01-04 10:26:03,451 INFO  >>> - 
2011-01-04 10:26:03,451 INFO  >>> - ------ server initialization -------
2011-01-04 10:26:03,451 INFO  >>> - added 7 maps to the mapcycle
2011-01-04 10:26:03,451 INFO  >>> - 
2011-01-04 10:26:03,451 INFO  >>> - ----------- parse scripts ----------
2011-01-04 10:26:03,451 INFO  >>> - 50 script files
2011-01-04 10:26:03,451 INFO  >>> - Shared Client/Server Info loaded
2011-01-04 10:26:03,451 INFO  >>> - ... 99 items parsed
2011-01-04 10:26:03,452 INFO  >>> - ... 32 damage types parsed
2011-01-04 10:26:03,452 INFO  >>> - ... 80 map definitions parsed
2011-01-04 10:26:03,452 INFO  >>> - ... 29 equipment definitions parsed
2011-01-04 10:26:03,452 INFO  >>> - ... 10 inventory definitions parsed
2011-01-04 10:26:03,452 INFO  >>> - ... 20 team definitions parsed
2011-01-04 10:26:03,452 INFO  >>> - executing dedicated.cfg
2011-01-04 10:26:03,452 INFO  >>> - =============================================================== 
2011-01-04 10:26:03,452 INFO  >>> - | CVAR                           | DESCRIPTION                | 
2011-01-04 10:26:03,452 INFO  >>> - =============================================================== 
2011-01-04 10:26:03,452 INFO  >>> - | sv_enablemorale                | activate morale            | 
2011-01-04 10:26:03,452 INFO  >>> - | sv_teamplay                    | activate teamplay          | 
2011-01-04 10:26:03,452 INFO  >>> - | sv_ai                          | activate ai (aliens)       | 
2011-01-04 10:26:03,452 INFO  >>> - | ai_autojoin                    | auto join of ai players    | 
2011-01-04 10:26:03,452 INFO  >>> - | ai_numactors                   | number of ai opponents     | 
2011-01-04 10:26:03,452 INFO  >>> - | ai_equipment                   | equipment def the ai uses  | 
2011-01-04 10:26:03,452 INFO  >>> - | ai_alien                       | alien team                 | 
2011-01-04 10:26:03,452 INFO  >>> - | ai_civilian                    | civilian team              | 
2011-01-04 10:26:03,452 INFO  >>> - | sv_maxsoldiersperplayer        | max soldiers per player    | 
2011-01-04 10:26:03,452 INFO  >>> - | sv_maxsoldiersperteam          | max soldiers per team      | 
2011-01-04 10:26:03,452 INFO  >>> - | sv_maxclients                  | max client amount          | 
2011-01-04 10:26:03,453 INFO  >>> - =============================================================== 
2011-01-04 10:26:03,453 INFO  >>> - 
2011-01-04 10:26:03,453 INFO  >>> - Available gametypes:
2011-01-04 10:26:03,453 INFO  >>> - 1on1
2011-01-04 10:26:03,453 INFO  >>> -   sv_teamplay = 0
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxclients = 2
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxsoldiersperplayer = 4
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxsoldiersperteam = 4
2011-01-04 10:26:03,453 INFO  >>> -   ai_numactors = 0
2011-01-04 10:26:03,453 INFO  >>> -   sv_ai = 0
2011-01-04 10:26:03,453 INFO  >>> - 1on1on1
2011-01-04 10:26:03,453 INFO  >>> -   sv_teamplay = 0
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxclients = 3
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxsoldiersperplayer = 4
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxsoldiersperteam = 4
2011-01-04 10:26:03,453 INFO  >>> -   ai_numactors = 0
2011-01-04 10:26:03,453 INFO  >>> -   sv_ai = 0
2011-01-04 10:26:03,453 INFO  >>> - 2on2
2011-01-04 10:26:03,453 INFO  >>> -   sv_teamplay = 1
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxclients = 4
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxsoldiersperplayer = 4
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxsoldiersperteam = 8
2011-01-04 10:26:03,453 INFO  >>> -   ai_numactors = 0
2011-01-04 10:26:03,453 INFO  >>> -   sv_ai = 0
2011-01-04 10:26:03,453 INFO  >>> - 2on2on2
2011-01-04 10:26:03,453 INFO  >>> -   sv_teamplay = 1
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxclients = 6
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxsoldiersperplayer = 4
2011-01-04 10:26:03,453 INFO  >>> -   sv_maxsoldiersperteam = 8
2011-01-04 10:26:03,454 INFO  >>> -   ai_numactors = 0
2011-01-04 10:26:03,454 INFO  >>> -   sv_ai = 0
2011-01-04 10:26:03,454 INFO  >>> - 3on3
2011-01-04 10:26:03,454 INFO  >>> -   sv_teamplay = 1
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxclients = 6
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxsoldiersperplayer = 2
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxsoldiersperteam = 6
2011-01-04 10:26:03,454 INFO  >>> -   ai_numactors = 0
2011-01-04 10:26:03,454 INFO  >>> -   sv_ai = 0
2011-01-04 10:26:03,454 INFO  >>> - 3on3on3
2011-01-04 10:26:03,454 INFO  >>> -   sv_teamplay = 1
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxclients = 9
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxsoldiersperplayer = 2
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxsoldiersperteam = 6
2011-01-04 10:26:03,454 INFO  >>> -   ai_numactors = 0
2011-01-04 10:26:03,454 INFO  >>> -   sv_ai = 0
2011-01-04 10:26:03,454 INFO  >>> - 4on4
2011-01-04 10:26:03,454 INFO  >>> -   sv_teamplay = 1
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxclients = 8
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxsoldiersperplayer = 2
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxsoldiersperteam = 8
2011-01-04 10:26:03,454 INFO  >>> -   ai_numactors = 0
2011-01-04 10:26:03,454 INFO  >>> -   sv_ai = 0
2011-01-04 10:26:03,454 INFO  >>> - 4on4on4
2011-01-04 10:26:03,454 INFO  >>> -   sv_teamplay = 1
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxclients = 12
2011-01-04 10:26:03,454 INFO  >>> -   sv_maxsoldiersperplayer = 2
2011-01-04 10:26:03,455 INFO  >>> -   sv_maxsoldiersperteam = 8
2011-01-04 10:26:03,455 INFO  >>> -   ai_numactors = 0
2011-01-04 10:26:03,455 INFO  >>> -   sv_ai = 0
2011-01-04 10:26:03,455 INFO  >>> - coop2
2011-01-04 10:26:03,455 INFO  >>> -   sv_teamplay = 1
2011-01-04 10:26:03,455 INFO  >>> -   sv_maxclients = 2
2011-01-04 10:26:03,455 INFO  >>> -   sv_maxsoldiersperplayer = 4
2011-01-04 10:26:03,455 INFO  >>> -   sv_maxsoldiersperteam = 8
2011-01-04 10:26:03,455 INFO  >>> -   ai_numactors = 8
2011-01-04 10:26:03,455 INFO  >>> -   sv_ai = 1
2011-01-04 10:26:03,455 INFO  >>> - coop3
2011-01-04 10:26:03,455 INFO  >>> -   sv_teamplay = 1
2011-01-04 10:26:03,455 INFO  >>> -   sv_maxclients = 3
2011-01-04 10:26:03,455 INFO  >>> -   sv_maxsoldiersperplayer = 2

dann bleibt er stehen ... in der STDIN Klasse warte ich 2 Sekunden und sende dann über stdin entsprechend den Quit-Befehl ... und schon kommt der Rest aus STDOUT

Code:
2011-01-04 10:26:05,253 INFO  <<< - quit
2011-01-04 10:26:05,308 INFO  >>> -   sv_maxsoldiersperteam = 6
2011-01-04 10:26:05,308 INFO  >>> -   ai_numactors = 6
2011-01-04 10:26:05,308 INFO  >>> -   sv_ai = 1
2011-01-04 10:26:05,308 INFO  >>> - coop4
2011-01-04 10:26:05,308 INFO  >>> -   sv_teamplay = 1
2011-01-04 10:26:05,309 INFO  >>> -   sv_maxclients = 4
2011-01-04 10:26:05,309 INFO  >>> -   sv_maxsoldiersperplayer = 2
2011-01-04 10:26:05,309 INFO  >>> -   sv_maxsoldiersperteam = 8
2011-01-04 10:26:05,309 INFO  >>> -   ai_numactors = 8
2011-01-04 10:26:05,309 INFO  >>> -   sv_ai = 1
2011-01-04 10:26:05,309 INFO  >>> - 
2011-01-04 10:26:05,309 INFO  >>> - To change the gametype, just change the cvar gametype to one of the above shown types 
2011-01-04 10:26:05,309 INFO  >>> - set gametype to: 1on1
2011-01-04 10:26:05,310 INFO  >>> -   sv_teamplay = 0
2011-01-04 10:26:05,310 INFO  >>> -   sv_maxclients = 2
2011-01-04 10:26:05,310 INFO  >>> -   sv_maxsoldiersperplayer = 4
2011-01-04 10:26:05,310 INFO  >>> -   sv_maxsoldiersperteam = 4
2011-01-04 10:26:05,310 INFO  >>> -   ai_numactors = 0
2011-01-04 10:26:05,310 INFO  >>> -   sv_ai = 0
2011-01-04 10:26:05,310 INFO  >>> - ------- Loading game.so -------
2011-01-04 10:26:05,310 INFO  >>> - found at '/usr/lib/games/ufoai/base/ufoai'
2011-01-04 10:26:05,311 INFO  >>> - ==== InitGame ====
2011-01-04 10:26:05,311 INFO  >>> - Master server at [http://ufoai.ninex.info/] - sending a ping
2011-01-04 10:26:05,311 INFO  >>> - SV_AssembleMap: Map assembly 'default' not found
2011-01-04 10:26:05,311 INFO  >>> - SV_AssembleMap: Sequential map assembly in 20 ms
2011-01-04 10:26:05,311 INFO  >>> - CM_LoadMap: "-africa/af_ +craft_ufo_scout +craft_drop_firebird +mp_team2 +empty1 +empty2 +house1 +house2 +house3 +house4 +house5 +fence1" "8 -8 0 -24 -16 0 -8 -8 0 -24 8 0 16 8 0 -16 8 0 8 -16 0 -8 8 0 0 8 0 -8 -16 0 16 -16 0"
2011-01-04 10:26:05,311 INFO  >>> - Rerouted for RMA in   0.0s
2011-01-04 10:26:05,311 INFO  >>> - checksum for the map '+africa': 1163815174
2011-01-04 10:26:05,311 INFO  >>> - ufo script checksum 2634771025
2011-01-04 10:26:05,311 INFO  >>> - AI deactivated - set sv_ai cvar to 1 to activate it
2011-01-04 10:26:05,311 INFO  >>> - Could not create civilian
2011-01-04 10:26:05,311 INFO  >>> - -------------------------------------
[B]2011-01-04 10:26:05,311 INFO  >>> - ====== UFO Initialized ======[/B]
2011-01-04 10:26:05,311 INFO  >>> - =============================
2011-01-04 10:26:05,311 INFO  >>> - Wrote dedconfig.cfg.
2011-01-04 10:26:05,311 INFO  >>> - Shutdown server: Server quit.
2011-01-04 10:26:05,311 INFO  >>> - ==== ShutdownGame ====
2011-01-04 10:26:05,326 INFO  sys - 'ufoded' beendet mit: 0

das er hier im STDOUT hängen bleibt, weil der Stream gepuffert wird, zeigt die entsprechende Zeile ... der Server ist schon lange initialisiert ... ich kann die Zeit bis zum Senden des Quit-Befehls beliebig skalieren ... immer das gleiche Verhalten ... außerdem sehe ich den Server wenn ich mit dem Client verbinden will ... mache ich eine Mapwechsel oder sonstiges kommt auch erst verspätet die Initialisierungsmeldung bzw. die anderen Dinge die ich über RCON veranstalte

wenn ich den Server direkt in der Console starte, kommt alles sofort in der Konsole an - bis zur Initialisierung ... erst dann kann ich den Quit-Befehl eintippen


Java:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;



/**
 *
 * @author mogel
 */
public class Main {

    private static Logger logsys = Logger.getLogger("sys");
    private static Logger logout = Logger.getLogger(">>>");
    private static Logger login  = Logger.getLogger("<<<");
    private static Logger logerr = Logger.getLogger("!!!");

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Main m = new Main();
        if (m == null) System.out.println("!!!   -   0x2b || !0x2b   -   !!!");
    }

    private Main()
    {
        PropertyConfigurator.configure("log4j.properties");

        try {
            Runtime rtm = Runtime.getRuntime();
            Process process = rtm.exec("ufoded");
            (new Thread(new STDOUT(process))).start();
            (new Thread(new STDIN (process))).start();
            (new Thread(new STDERR(process))).start();

            int returnWert = process.waitFor(); // holt den Rückgabewert des Bereits beendeten
            ende = true;
            logsys.info("'ufoded' beendet mit: " + returnWert);
        } catch (Exception ex) {
            logsys.error(ex.getMessage());
        }
    }

    private static boolean ende = false;

    private class STDOUT implements Runnable
    {
        private Process process;
        public STDOUT(Process process)
        {
            this.process = process;
        }
        public void run() {
            logsys.info("starte mit Ausgabe von 'ufoded'");
            while(!ende) try {
                StringBuilder sb = new StringBuilder();
                while(true)
                {
                    if (ende) break;
                    int c = process.getInputStream().read();
                    if (c == 0x0a) break;
                    if (c == 0x0d) continue;
                    sb = sb.append((char)c);
                }
                if (!ende) logout.info(sb.toString());
            } catch (Exception ex) {
                logout.error(ex.getMessage());
            }
        }
    }

    private class STDIN implements Runnable
    {
        private Process process;
        public STDIN(Process process)
        {
            this.process = process;
        }
        public void run() {
            logsys.info("starte mit Eingabe von 'ufoded'");
            try {
                Thread.sleep(2000);
                login.info("quit");
                process.getOutputStream().write("quit".getBytes("ascii"));
                process.getOutputStream().write((char)0x0d);
                process.getOutputStream().flush();
                Thread.sleep(1000);
                process.destroy();
            } catch (Exception ex) {
                login.error(ex.getMessage());
            }
        }
    }

    private class STDERR implements Runnable
    {
        private Process process;
        public STDERR(Process process)
        {
            this.process = process;
        }
        public void run() {
            logsys.info("starte mit Fehler von 'ufoded'");
            while(!ende) try {
                StringBuilder sb = new StringBuilder();
                while(true)
                {
                    if (ende) break;
                    int c = process.getErrorStream().read();
                    if (c == 0x0a) break;
                    if (c == 0x0d) continue;
                    sb = sb.append((char)c);
                }
                if (!ende) logerr.info(sb.toString());
            } catch (Exception ex) {
                logout.error(ex.getMessage());
            }
        }
    }
}

hand, mogel
 

tagedieb

Top Contributor
Wie gesagt, der BufferedInputStream gibt dir alles sofort zurueck sobald etwas im Puffer liegt. Das Problem duerfte im darunterliegenden InputStream oder in der Process Klasse selbst zu finden sein.
 
G

Gast2

Gast
Moin,

das Übliche

Code:
OUTPUT>
OUTPUT>---- filesystem initialization -----
OUTPUT>Adding game dir: /usr/share/games/ufoai/base
OUTPUT>Added packfile /usr/share/games/ufoai/base/0base.pk3 (9 files)

[B][ ... schnipp 8< schnapp ... ][/B]

OUTPUT>coop3
OUTPUT>  sv_teamplay = 1
OUTPUT>  sv_maxclients = 3
OUTPUT>  sv_maxsoldiersperplayer = 2

nachdem ich den Server abschieße, über Taskmanager, kommt der Rest ... im Moment "organisiere" ich mir UFO:AI für Windows und werde es mal unter Windows testen

hand, mogel
 

tagedieb

Top Contributor
So wie's aussieht laueft die Kommunikation via Files. Das duerfte auch der Grund fuer die Verzoegerung sein. Der InputStream kann nur auslesen was ins File geschrieben wurde.


Java:
 // java.util.ProcessImpl

		stdin_stream =
		    new BufferedOutputStream(new FileOutputStream(stdin_fd));
		stdout_stream =
		    new BufferedInputStream(new FileInputStream(stdout_fd));
		stderr_stream =
		    new FileInputStream(stderr_fd);
		return null;
 
G

Gast2

Gast
So wie's aussieht laueft die Kommunikation via Files. Das duerfte auch der Grund fuer die Verzoegerung sein.

*argh* - verräts Du mir wo Du den Quelltext her hast?? ... ich bin im Moment irgendwie zu doof dazu Google/Oracle zu bringen mir einen Link zu verraten ... das einzige was ich bis dato gefunden haben ist eine JAR-Datei mir einer 140 MB großen "X_X" genannten Datei ???:L

im Übrigend war klar das sich der Server unter Windows anders verhält ... da wird gleich eine eigene Console aufgemacht :autsch:

hand, mogel
 

FerFemNemBem

Bekanntes Mitglied
Halloechen,

in Deinem JDK-Verzeichnis findest Du ein "src.zip". Dort (nicht wie oben im Kommentar unter "java/util" sondern unter "java/lang") findest Du die Sourcen der "ProcessImpl"-Klasse.

Gruss, FFNB.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
D Java Process OutputStream ist null Allgemeine Java-Themen 4
X Problem bei process.start() ExitValue Allgemeine Java-Themen 5
T Mit Java auf die Konsole eines Process-Objekts zugreifen Allgemeine Java-Themen 10
P Input/Output Process.getErrorStream = OutputStream Allgemeine Java-Themen 11
J Download: Filename + Process waitFor() Allgemeine Java-Themen 5
S Wie beendet man einen Process in Java Platform unabhänging? Allgemeine Java-Themen 8
M Process wird gestoppt und nach beenden der Anwendung fortgeführt Allgemeine Java-Themen 4
G Process.destory() == CTRL+C Allgemeine Java-Themen 2
P Swing GUI Process anzeigen Allgemeine Java-Themen 10
F Process.getInputStream unter Linux Allgemeine Java-Themen 7
schlingel Process - Ausgabe leer Allgemeine Java-Themen 5
J Process beenden ...aber wie ? Allgemeine Java-Themen 19
G Process - mehrere Commands?! Allgemeine Java-Themen 2
MQue auf gestarteten Process warten Allgemeine Java-Themen 7
G Process.wait() auf Folgeprozesse mitwarten Allgemeine Java-Themen 29
P Bedeutung der Process.exitValue() Werte? Allgemeine Java-Themen 3
J Process auf Console anzeigen lassen. Allgemeine Java-Themen 5
S Process - Befehle senden Allgemeine Java-Themen 13
B Process Builder Allgemeine Java-Themen 10
D Thread & Process: Beenden einer Batch-Datei Allgemeine Java-Themen 8
J process.getInputStream() hängt auf merkwürdige Art und Weise Allgemeine Java-Themen 7
D Fremdes Programm schließen (ohne process.destroy()) Allgemeine Java-Themen 8
S process.waitFor() endet mit -1 Allgemeine Java-Themen 3
M Process -> getInputStream -> nur gepuffert ? Allgemeine Java-Themen 12
A Runtime Process bricht nicht ab! Allgemeine Java-Themen 7
C Process output Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben