我在 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。QUITCTRL-\
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将会终止。