cat-ing um arquivo para um pipe unix faz o Matlab congelar

6

Eu criei um pipe nomeado no Debian usando mkfifo pipe.in . Eu quero escrever para esse tubo do Matlab.

Para fazer isso, eu uso o seguinte comando matlab:

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

Em que <myfile> é um arquivo de texto e pipe.in é o canal que criei com mkfifo .

Em muitos casos, o processo associado ao pipe falhou por vários motivos (mas qualquer motivo além do uso do comando unix e cat). O acidente pode ser normal em vários casos.

Executar o comando acima faz o Matlab congelar e não consigo recuperar o controle com CTRL+C .

Existe outra maneira de liberar o Matlab sem exigir que eu mate o processo?

    
por Guuk 17.01.2013 / 16:26

1 resposta

2

Desbloqueando o Matlab

Você pode desbloquear o Matlab enviando o sinal QUIT pressionando CTRL-\ no terminal que você lançou o Matlab de.

Por que o Matlab está congelando

O Matlab está congelando porque a função unix nunca retorna porque cat <myfile> > pipe nunca termina.

A execução de cat <myfile> > pipe.in em um terminal demonstra o mesmo comportamento de "congelamento".

Meu bash-fu não é muito bom, mas acho que algo deve estar lendo do canal antes que o writer possa terminar.

Crie um pipe e um arquivo temporários

mkfifo /tmp/tempPipe
echo "1 2 3 4 5 6 7 8 0" > /tmp/tempFile

Escreva para o tubo

Este comando não terminará:

cat /tmp/tempFile > /tmp/tempPipe 

Este comando irá:

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

Espero que, se você criar um processo de leitura, sua chamada do Matlab para unix seja encerrada.

    
por 17.01.2013 / 19:43