題 將文件寫入unix管道會導致Matlab凍結


我用Debian在Debian上創建了一個命名管道 mkfifo pipe.in。我想從Matlab寫這個管道。

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

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

哪裡 <myfile> 是一個文本文件和 pipe.in 是我創建的管道 mkfifo

在許多情況下,與管道相關的進程由於多種原因而崩潰(但除了使用unix和cat命令之外的任何原因)。在幾種情況下,崩潰可能是正常的。

執行上面的命令導致Matlab凍結,我無法重新獲得控制權 CTRL+C

有沒有其他方法來釋放Matlab而不要求我殺死進程?


6
2018-01-17 15:26


起源


嘗試運行 cat 通過追加在後台命令 & 命令......
你是怎麼創造管道的? - Rody Oldenhuis
@EitanT我嘗試它並取消阻止MatLab但在我的情況下我必須等待unix命令終止以確保該過程完成
@RodyOldenhuis我創建管道如下: mkfifo pipe.i; mkfifo pipe.out; time echo "<intern command of the executable>"| <executable> > log &
如果你只是簡單地發生了什 cat 沒有管道的文件,這會凍結嗎?您是否嘗試過使用matlab打開管道? fopen 用它寫信給它 fprintf? - slayton


答案:


解鎖Matlab

你可以解鎖Matlab 發送 QUIT 按下信號 CTRL-\ 在您啟動Matlab的終端中。

為什麼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

寫入管道

此命令不會終止:

cat /tmp/tempFile > /tmp/tempPipe 

該命令將:

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

我希望如果你創建一個閱讀過程然後你的Matlab調用 unix 將終止。


2
2018-01-17 18:43



冷凍的“行為”對我來說不是一個真正的問題。在經典案例中,我希望整個命令都能通過管道(因為我必須等待其他操作)。凍結行為在終端中不是問題,因為我可以通過按CTRL + C來停止它。但在matlab中,我無法使用此命令。
有關信息,由命令通過管道管理的主進程是數值求解。因此,在我的情況下,我必須使用管道向solvor發送命令(每組命令導致數值計算)。我正在等待命令組進入管道,當最後一個命令進入管道時,我可以在發送新命令之前在MatLab中繼續許多操作。
我想在solvor崩潰時(並刪除管道)停止凍結行為。
@Guuk然後用CTRL- - slayton
我會嘗試但是將來我想在群集上使用我的matlab程序,我不能使用它。所以我找了一個自動的