6

Я создал именованный канал в Debian, используя mkfifo pipe.in Я хочу написать в эту трубу от Matlab.

Для этого я использую следующую команду matlab:

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

Где <myfile> - текстовый файл, а pipe.in - канал, который я создал с помощью mkfifo .

Во многих случаях процесс, связанный с конвейером, завис по многим причинам (но не по причинам, связанным с использованием команд unix и cat). Авария может быть нормальной в нескольких случаях.

Выполнение вышеуказанной команды приводит к зависанию Matlab, и я не могу восстановить управление с помощью CTRL+C

Есть ли другой способ освободить Matlab, не требуя, чтобы я убил процесс?

1 ответ1

2

Разблокировка 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 прекратится.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .