将文件拖到 unix 管道会导致 Matlab 冻结

将文件拖到 unix 管道会导致 Matlab 冻结

我已经使用 在 Debian 上创建了一个命名管道 mkfifo pipe.in。我想从 Matlab 写入该管道。

为此,我使用以下 matlab 命令:

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

哪里<myfile>是文本文件,pipe.in哪里是我用创建的管道mkfifo

在许多情况下,与管道相关的进程会因多种原因而崩溃(但任何原因都不能超过使用 unix 和 cat 命令的原因)。在某些情况下,崩溃可能是正常的。

执行上述命令导致 Matlab 冻结,并且我无法重新获得控制CTRL+C

有没有其他方法可以释放 Matlab 而不需要我终止进程?

答案1

解除 Matlab 阻塞

您可以通过以下方式解锁 MatlabQUIT通过按下发送信号CTRL-\在您启动 Matlab 的终端中。

为什么 Matlab 会冻结

Matlab 冻结了,因为unix函数永不返回,因为cat <myfile> > pipe永不终止。

cat <myfile> > pipe.in在终端中执行会出现相同的“冻结”行为。

我的功夫不太好,但我认为一定有什么阅读从管道前作家可以终止。

创建临时管道和文件

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

我希望如果您创建了一个读取过程,那么您的 Matlab 调用unix将会终止。

相关内容