Ich habe ein Problem mit einem Prozessumbruch und er tritt nur in Windows XP auf. Dieser Code funktioniert perfekt in Windows 7. Ich bin wirklich ratlos, warum die Streams in XP leer sind. Ich habe auch versucht, die String [] Version von Process.Exec () und es machte keinen Unterschied.
Ich verwende die folgende Klasse, um aus dem Prozess 'STDOUT und STDERR (eine Instanz für jeden Stream) zu lesen:
%Vor%Und ich benutze es hier:
%Vor%Hat jemand Ideen? Danke!
Bearbeiten: Hinzugefügte Synchronisation
Bearbeiten: Wie bei einem Update werden die übergeordneten Stream-Reader bei ihrer Leseoperation blockiert. Wenn ich die untergeordneten Prozesse mit dem Task-Manager abbringe, lesen sie den Nullwert vom Schließen des Streams ein.
Ein Fehler, der mir auffällt ist, dass LinkedList
nicht synchronisiert , aber Sie versuchen, in 2 Threads zu schreiben.
Beachten Sie auch, dass Process.getInputStream()
den stdout
-Stream des Prozesses zurückliefert. Daher sollten Sie die Variable, die momentan stdin
heißt, in stdout
umbenennen, um Verwirrung zu vermeiden.
Es gibt bekannte Fehler in Windows-Betriebssystemen vor Vista, bei denen das Laden von DLLs zu einem Hängenbleiben in IO führen kann.
z.B. siehe Ссылка und < a href="https://connect.microsoft.com/VisualStudio/feedback/details/94701/loadlibrary-deadlocks-with-a-pipe-read"> Ссылка
Ich bin mir nicht sicher, ob das genau das ist, wo du gerade rennst, aber es mag verwandt sein.
Außerdem erinnere ich mich vage an einige Probleme beim Erhalt einer gültigen stdin und stdout von Nicht-Konsolen-Windows-Anwendungen. Wenn Ihr Aufruf von 'test.jar' 'javaw' anstelle von 'java' verwendet, könnte dies auch die Ursache für Ihr Problem sein.
Da einige native Plattformen nur eine begrenzte Puffergröße für Standardeingabe- und -ausgabeströme bieten, kann das fehlerhafte Schreiben des Eingabedatenstroms oder das Lesen des Ausgabestreams des Unterprozesses dazu führen, dass der Unterprozess blockiert und sogar blockiert.
Tags und Links java process deadlock inputstream