![将文件拖到 unix 管道会导致 Matlab 冻结](https://linux22.com/image/1347334/%E5%B0%86%E6%96%87%E4%BB%B6%E6%8B%96%E5%88%B0%20unix%20%E7%AE%A1%E9%81%93%E4%BC%9A%E5%AF%BC%E8%87%B4%20Matlab%20%E5%86%BB%E7%BB%93.png)
我已经使用 在 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
将会终止。