it-swarm-ja.com

ファイルをunixパイプにキャットすると、Matlabがフリーズします

mkfifo pipe.inを使用してDebianで名前付きパイプを作成しました。 Matlabからこのパイプに書き込みたいです。

これを行うには、次のmatlabコマンドを使用します。

unix( 'cat <myfile> > pipe.in' )

ここで、<myfile>はテキストファイルで、pipe.inmkfifoで作成したパイプです。

多くの場合、パイプに関連付けられたプロセスは多くの理由でクラッシュしました(ただし、unixおよびcatコマンドの使用以外の理由で)。クラッシュはいくつかの場合に正常である可能性があります。

上記のコマンドを実行すると、Matlabがフリーズし、CTRL+Cで制御を取り戻すことができません。

プロセスを強制終了せずにMatlabをリリースする別の方法はありますか?

6
Guuk

Matlabのブロックを解除する

Matlabのブロックを解除するには、Matlabを起動したターミナルで CTRL-\を押してQUITシグナルを送信します

Matlabがフリーズする理由

cat <myfile> > pipeが終了しないため、unix関数が戻らないため、Matlabがフリーズしています。

ターミナルでcat <myfile> > pipe.inを実行すると、同じ「フリーズ」動作が示されます。

私のbash-fuはあまり良くありませんが、writerが終了する前に、パイプから何かがreadingされている必要があると思います。

一時的なパイプとファイルを作成する

mkfifo /tmp/tempPipe
echo "1 2 3 4 5 6 7 8 0" > /tmp/tempFile

パイプに書き込む

このコマンドは終了しません:

cat /tmp/tempFile > /tmp/tempPipe 

このコマンドは次のようになります。

cat /tmp/tempFile > /tmp/tempPipe & cat < /tmp/tempPipe

読み取りプロセスを作成すると、unixへのMatlab呼び出しが終了することを期待しています。

2
slayton