Почему Matlab 2016a не может быть уничтожен CTRL-C Терминала в Debian 8.5?

Рис. 1 Нажатие два раза CTRL + C в Терминале не работает, но помещает два разрыва строки в командную строку Matlab

enter image description here

Я думаю, что что-то не так с привязками клавиш. Я безуспешно пробовал и Windows, и Emacs. Привязка клавиш работает в системе Mathematica. Debian 8.x поддерживается MathWorks для Matlab, поэтому его следует поддерживать.

Связанные условия

  1. При вводе CTRL + C в приглашении Matlab вводится не kill , а разрыв строки
  2. ...

Дифференциальные решения

  1. Откройте командную строку Matlab и введите exit .
  2. Откройте Системный монитор и подайте сигнал kill и / или force kill в Matlab

Matlab: 2016a, предварительная версия 2016b
Аппаратное обеспечение: Asus Zenbook UX303UA
ОС: Debian 8.5
Ядро Linux: 4.6 (обратные порты)
По теме: [наконец ничего не нашел; большинство условий связано с условием, когда вы вводите что-то непосредственно в приглашении Matlab]
Сервисный билет MathWorks: 02154064

-1
06.09.2016, 15:10
3 ответа

Значение по умолчанию для Ctrl + C должен послать сигнал SIGINT. Традиционное значение SIGINT - остановить задачу, которая в настоящее время выполняется на переднем плане, и позволить пользователю ввести новый ввод. Я использую задачу в неформальном смысле того, что делает компьютер. Это не обязательно отдельный процесс. В такой программе, как Matlab, которая считывает последовательные команды и обрабатывает их - REPL - SIGINT должен возвращать пользователя к приглашению этой программы, а не убивать программу. Когда задача переднего плана - это программа, которая выполняет одно задание, а затем завершает работу, SIGINT должен убить программу, поскольку это способ вернуть пользователя к приглашению оболочки.

Попробуйте Ctrl + \ . Это посылает сигнал SIGQUIT, и обычное значение SIGQUIT - немедленно выйти и (если система настроена для этого) оставить дамп ядра . Не все программы сохраняют это значение, я не знаю, поддерживает ли это Matlab.

Если ключи сигнала уничтожения не работают, попробуйте Ctrl + Z , чтобы отправить сигнал SIGSTOP, который приостанавливает программу и возвращает вас к приглашению оболочки, где вы можете отправить другое сигнал. Когда вы приостанавливаете задание, оболочка показывает сообщение типа

[1]+  Stopped       matlab

. Число в скобках - это номер задания. Вы можете использовать % 1 вместо идентификатора процесса, чтобы отправить сигнал процессу из этой оболочки, например kill% 1 здесь, чтобы отправить SIGTERM (нормальный сигнал уничтожения), и если это не сработает, тогда kill -KILL% 1 (SIGKILL, сигнал уничтожения, который не дает приложение шанс).

Если вы не можете прервать приложение, чтобы получить доступ к оболочке, работающей на этом терминале, уничтожьте его из другой оболочки, работающей в другом терминале.

1
28.01.2020, 05:08

Ваша оболочка также не умирает, когда вы набираете Ctrl-C. Текущая командная строка отменяется, и вы получаете новое приглашение, вместо того, чтобы оболочка завершала работу и выходила из системы, или возвращалась к предыдущей программе.

Оболочка системных команд, такая как Bash, - это просто программное обеспечение; все, что она может делать, можно запрограммировать на выполнение любой другой оболочки на языке программирования, используя те же методы.

В то время как типичная оболочка языка программирования находится в интерактивном режиме редактирования, TTY находится в необработанном режиме, и Ctrl-C является обычным символом. Действие отмены текущей командной строки может быть реализовано так, как если бы это был специальный тип команды редактирования, привязанный к клавише Ctrl-C.

Кроме того, оболочки некоторых языков программирования позволяют прерывать оценку кода. Обычно это достигается тем, что во время выполнения кода режим TTY восстанавливается до обычных настроек, которые привязывают Ctrl-C к генерации сигнала SIGINT, который обрабатывается. Каким-то образом обработка переводится в отмену выполняющегося кода. Интерпретатор, написанный на языке C, может выполнить longjmp в место, заданное с помощью setjmp интерактивной подсказки. Сам обработчик сигнала SIGINT может просто установить глобальную переменную, которая говорит "прерывание поднято". Интерпретатор может время от времени проверять эту переменную и превращать ее в исключение. Это позволяет избежать дополнительных сложностей, связанных с выходом из обработчика сигнала.

0
28.01.2020, 05:08

MATLAB - это не математика; похоже, что программисты MATLAB решили либо заблокировать SIGINT ( ^ C во время запуска), либо установить специальный обработчик, который испускает новую строку (в режиме командной строки). Это типичное поведение для среды оболочки.

1
28.01.2020, 05:08

Теги

Похожие вопросы