cat-ing 文件到 unix 管道会导致 Matlab 冻结

Guu*_*uuk 6 unix matlab pipe

我在 Debian 上使用 mkfifo pipe.in. 我想从 Matlab 写入这个管道。

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

unix( 'cat <myfile> > pipe.in' )
Run Code Online (Sandbox Code Playgroud)

哪里<myfile>是文本文件,pipe.in是我用mkfifo.

在许多情况下,与管道关联的进程因多种原因崩溃(但除了使用 unix 和 cat 命令之外的任何原因)。在几种情况下,崩溃可能是正常的。

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

有没有另一种方法可以在不需要我终止进程的情况下发布 Matlab?

小智 2

解锁Matlab

您可以通过按启动 Matlab 的终端发送信号来解锁 Matlab。QUITCTRL-\

为什么 Matlab 冻结

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

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

我的 bash-fu 不是很好,但我认为在编写器终止之前必须从管道中读取某些内容。

创建临时管道和文件

mkfifo /tmp/tempPipe
echo "1 2 3 4 5 6 7 8 0" > /tmp/tempFile
Run Code Online (Sandbox Code Playgroud)

写入管道

该命令不会终止:

cat /tmp/tempFile > /tmp/tempPipe 
Run Code Online (Sandbox Code Playgroud)

该命令将:

cat /tmp/tempFile > /tmp/tempPipe & cat < /tmp/tempPipe
Run Code Online (Sandbox Code Playgroud)

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