Ich habe eine Named Pipe unter Debian mit erstellt mkfifo pipe.in
. Ich möchte diese Pipe von Matlab schreiben.
Dazu verwende ich den folgenden matlab-Befehl:
unix( 'cat <myfile> > pipe.in' )
Wo <myfile>
ist eine Textdatei und pipe.in
ist die Pipe, mit der ich erstellt habe mkfifo
.
In vielen Fällen stürzte der mit der Pipe verbundene Prozess aus verschiedenen Gründen ab (jedoch aus Gründen, die über die Verwendung des Befehls unix und cat hinausgehen). Der Absturz kann in mehreren Fällen normal sein.
Das Ausführen des obigen Befehls führt dazu, dass Matlab einfriert und ich die Kontrolle über Matlab nicht wiedererlangen kann CTRL+C
.
Gibt es eine andere Möglichkeit, Matlab freizugeben, ohne dass ich den Prozess beenden muss?
cat
Befehl im Hintergrund&
mkfifo pipe.i; mkfifo pipe.out; time echo "<intern command of the executable>"| <executable> > log &
cat
die Datei ohne die Pipe hast , friert diese ein? Haben Sie versucht, die Pfeife mit matlab zu öffnenfopen
und mit zu schreibenfprintf
?Antworten:
Matlab entsperren
Sie können Matlab entsperren, indem Sie das
QUIT
Signal senden , indem SieCTRL-\
auf das Terminal drücken , von dem aus Sie Matlab gestartet haben.Warum Matlab friert
Matlab friert ein, weil die
unix
Funktion niemals zurückkehrt, weil siecat <myfile> > pipe
niemals beendet wird.Das Ausführen
cat <myfile> > pipe.in
in einem Terminal zeigt dasselbe "Einfrieren" -Verhalten.Mein Bash-Fu ist nicht sehr gut, aber ich denke, dass etwas aus der Pipe gelesen werden muss, bevor der Autor kündigen kann.
Erstellen Sie eine temporäre Pipe und Datei
Schreiben Sie an die Pipe
Dieser Befehl wird nicht beendet:
Dieser Befehl wird:
Ich gehe davon aus, dass Ihr Matlab-Anruf
unix
beendet wird , wenn Sie einen Lesevorgang erstellen .quelle