Другой способ выхода из IEX, кроме ctrl-C

Я знаю, что мы можем выйти из консоли IEX, нажав Ctrl-C. Мне любопытно, есть ли команда для ввода в консоль, которая также делала бы то же самое.


person User314159    schedule 06.05.2015    source источник


Ответы (5)


Я могу придумать 3 способа выйти из оболочки IEx:

  1. Упомянутый <ctrl-c> попал дважды или один раз, затем q, а затем <enter>,
  2. <ctrl-g>, а затем q + <enter>,
  3. и, наконец, System.halt,

но есть разница между System.halt и другими.

А именно, что System.halt "останавливает среду выполнения Erlang", а остальные просто "выходят из оболочки".

Если у вас запущен только один сеанс оболочки или сеанс не подключен к отдельной среде выполнения, оба способа дадут одинаковый результат. Но если у вас есть сеанс, подключенный к отдельной среде выполнения, например. через iex --remsh (удаленная оболочка), затем запуск System.halt в нем остановит время выполнения и, таким образом, завершит работу обоих процессов оболочки / времени выполнения. Простой выход из оболочки (методом 1 или 2) не остановит среду выполнения, к которой она подключена.

Вывод: если вы подключаетесь с помощью своей оболочки к другим средам выполнения, знайте, что System.halt остановит среду выполнения, к которой вы подключились. Если вы не хотите этого делать, используйте <ctrl-c>.

ОБНОВЛЕНИЕ: Недавно я также узнал о <ctrl-\>. Подробнее об этом можно прочитать в этой статье. :

Чего я не знал, так это того, что вы можете выйти из оболочки, отправив Ctrl-. Оболочка немедленно завершит работу. Насколько мне известно, это имеет тот же эффект, что и прерывание оболочки в команде Break, не влияет на удаленные узлы и также работает вне iex (например, вы можете использовать для завершения своих тестов).

person Szymon Jeż    schedule 07.05.2015
comment
Также есть :init.stop, который изящно останавливает виртуальную машину erlang. - person ibizaman; 10.07.2016
comment
пожалуйста, улучшите свой ответ в соответствии со структурой @raacer и примите его новую информацию - person flp; 23.01.2017
comment
@flp Пожалуйста, смотрите мой комментарий здесь способ выхода из iex, отличный от ctrl c"> stackoverflow.com/questions/30085376/ - person Szymon Jeż; 24.01.2017

  1. Отключиться от оболочки и остановить текущий узел. Это то, что вам нужно в большинстве случаев.

    1.1. Ctrl+\ — стандартный метод выхода из оболочки Erlang. См. "4.4 Как выйти из оболочки Erlang?" в разделе Erlang — Начало работы.

    1.2. Ctrl+C, a, Enter — с помощью команды (a)bort в Разбить меню.

    1.3. Ctrl+C, Ctrl+C — похоже на недокументированную функцию меню «Перерыв».

    1.4. Ctrl+G, q, Enter – с помощью команды q (выйти из языка) команды Переключение пользователя (см. Erlang -- оболочка -- Режим JCL).

    Примечание. при этом удаленный узел остается активным, если вы подключились к нему с помощью iex --remsh (см. iex --help и IEx -- удаленные оболочки).

  2. Выключите узел, к которому вы подключены.

    2.1. System.halt — быстрое и грязное закрытие. Система выполнения завершает работу с кодом состояния 0 (чистый выход без ошибок). Вы также можете вызвать System.halt(:abort) для прерывания с созданием дампа ядра. То же, что и :erlang.halt.

    2.2. :init.stop (System.stop в будущих версиях) - очистить неисправность. Все приложения закрываются плавно, весь код выгружается, а все порты закрываются до завершения работы системы путем вызова halt(Status).

    Примечание: это оставляет вашу оболочку активной, если вы подключились к удаленной оболочке с помощью iex --remsh.

Обратите внимание, что все эти параметры отключены, если Erlang запускается с игнорированием разрыва, +Bi, системным флагом: iex --erl +Bi (что может быть полезно, например, при запуске ограниченной оболочки). Подробнее см. Erlang -- erl.

person raacer    schedule 21.12.2016
comment
Почему вы почувствовали необходимость переформулировать уже имеющиеся ответы? - person Onorio Catenacci; 21.12.2016
comment
@OnorioCatenacci Потому что лучший ответ слишком сложен, не имеет четкой структуры и не содержит ссылок. - person raacer; 21.12.2016
comment
@OnorioCatenacci и, кстати, я думаю, что некоторые объяснения в лучшем ответе не совсем верны. - person raacer; 21.12.2016
comment
Привет, вот автор лучшего ответа :) Я думаю, что Ваш ответ теперь лучше моего. Я проголосовал за это. С другой стороны, @OnorioCatenacci прав. Он прав в том, что ваш ответ содержит в основном ту же информацию, что и мой ответ, и он, вероятно, предполагал, что вы можете просто переформатировать мой ответ, исправить некоторые вещи и выйти из них, чем дублировать вещи. - person Szymon Jeż; 24.01.2017
comment
@flp упомянул, что я должен обновить свой ответ, используя предоставленную вами информацию и структуру - я был бы рад сделать это, но я не хочу опираться на работу других людей, поэтому мне было бы лучше, если бы вы или другой пользователь сделали это Это :) - person Szymon Jeż; 24.01.2017
comment
@SzymonJeż Привет! Спасибо за ваш голос. Хотя я в основном согласен, есть одно замечание. Я был совершенно недоволен вашим ответом, а не только структурой. Поэтому я потратил много времени на собственное исследование и составил свой собственный ответ с моей точки зрения. Есть некоторые различия, возможно незначительные, но я чувствую, что они важны. Вот почему я создал новый ответ. Я думаю, что вы написали некоторые неправильные и неточные вещи, но я тоже могу ошибаться. Есть много других вопросов, на которые также есть несколько похожих ответов. Так что не вижу никакой проблемы. Пусть люди выбирают голосованием. - person raacer; 24.01.2017

Выглядит как

 System.halt

также работает.

person User314159    schedule 06.05.2015
comment
запустите «h System.halt», чтобы получить информацию о дополнительных аргументах, которые вы можете передать в него. - person Letseatlunch; 07.05.2015

вводите в оболочку :c.q() и будьте счастливы

person Александр Свириденко    schedule 09.10.2017

Я всегда думал, что ctrl-G, а затем q для выхода, был официальным способом выхода из оболочки iex.

См. раздел документации IEx в меню BREAK, который также показывает, как вы можете переключаться между альтернативными оболочками и т. д.

person GavinBrelstaff    schedule 06.05.2015
comment
На указанной странице ничего о q нет. Небольшое замечание, что для выхода можно использовать меню BREAK. Но само меню также не содержит опции (q)uit, так что это пока совершенно недокументировано. - person raacer; 21.12.2016