Как сделать чтобы сервер не выключался при закрытии консоли

Добавил пользователь Skiper
Обновлено: 10.09.2024

Приветствую страждущих, сегодня разберём вопрос о том, что можно предпринять, если запущенная вами командная консоль закрывается после выполнения работы, не сообщая более ни о чём. Давненько я разбирал вопрос о появляющейся на миг (обычно в период запуска Windows) и тут же захлопывающейся консоли. Там природа проблемы лежала в другой плоскости. Здесь же подразумевается, что консоль cmd запускается нарочито с вашего ведома (чаще в виде некоего батника). Но если та сразу закрывается, это не всегда удобно, если мы ожидаем ввода следующей команды или вывода результатов того, как батник отработал.

Если командная консоль закрывается самостоятельно, мы можем:

Учтите, что при применении этих настроек консоли впредь придётся указывать на то, чтобы та закрылась отдельной командой. Или ей придётся ожидать действий пользователя.

У способа небольшие допущения — к файлу должен быть прямой допуск по редактированию. Кроме того, команда позволяет увидеть процесс исполнения основных команд. Но если нужно, чтобы консоль оставалась открытой для отображения остальных команд, лучше использовать следующий способ.

Команда cmd /k

окно cmd готово к следующей команде

Настройки консоли в реестре

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

и найдём пару ключей

HKEY_CLASSES_ROOT\batfile\shell\open\command

HKEY_CLASSES_ROOT\cmdfile\shell\open\command

Какую команду я могу поместить в конец командного файла, чтобы предотвратить автоматическое закрытие консоли после выполнения файла?

В пакетных файлах Windows / DOS:

Зависит от конкретного вопроса!

Обычно pause выполняет свою работу в .летучая мышь файл.

Если хочешь cmd.exe не закрывать, чтобы можно было продолжать печатать, используйте cmd /k команда в конце файла.

Если вы хотите, чтобы cmd.exe не закрывался и мог продолжить ввод, используйте cmd /k

Просто почувствовал необходимость уточнить, что /k делает (с веб-сайта Windows):

/k : Выполняет команду, указанную в строке, и продолжает.

Так cmd /k без последующей команды в конце файла bat просто сохранит cmd.exe окно открыто для дальнейшего использования.

С другой стороны pause в конце командного файла просто приостановит процесс и завершит cmd.exe при первом нажатии кнопки

Если вы используете Maven и вы хотите пропустить ввод и предотвратить закрытие консоли, чтобы увидеть результат, необходимый для использования CALL в сценарии, помимо команды mvn clean install.

Как это закроет консоль

Как эта консоль останется открытым

Если вы не используете CALL Команда ни один из прошлых примеров работать не будет. Потому что по какой-то причине поведение cmd по умолчанию при вызове другого командного файла (которым в данном случае является mvn) заключается в замене им текущего процесса, в отличие от вызова .exe

  • 1 Большое спасибо! Это предотвращает закрытие приглашения в случае сбоя команды.
  • 1 У меня сработало. Я хотел выполнить две разные команды в одном файле bat. но моя подсказка закрылась после первой команды. Положив call решил эту проблему: моя подсказка перестала закрываться после первого выполнения
  • 1 Самый полезный ответ
  • 1 но почему закрывается без ЗВОНОК @andrey
  • 2 @Priyam, потому что по какой-то причине поведение cmd по умолчанию при вызове другого командного файла (которым в данном случае является mvn) заключается в замене им текущего процесса, в отличие от вызова .exe

Приведенный ниже способ размещения команд в пакетном файле откроет новые окна командной строки, и новые окна не будут закрыты автоматически.

Добавить cmd.exe в виде новой строки под кодом, который вы хотите выполнить:

мой способ - написать фактический пакет (говоря "foo.bat"), чтобы завершить работу; затем создайте еще один "start.bat":

Я считаю, что это чрезвычайно полезно при настройке одноразовых переменных среды.

  • 1 Вы можете просто поставить cmd /k (без команды) в конце foo.bat файл и запустите его. Вам не нужен отдельный start.bat файл.

Вызов cmd в конце командного файла.

может использоваться. Он ожидает ввода пользователя и освобождает поток при нажатии Enter.

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

Возможность 1: просто создайте 2 файла .bat и напишите в первый:

Пакетный файл 2 - это файл, который не закрывается в конце. Итак, теперь, когда вы открываете пакет №1, он запускает вторую и закрывается. Когда 2-й завершится, он не закроется полностью (если вы не поставите exit в конце)

Возможность 2: Командный файл 1:

Когда 2-й файл закончится, он снова перейдет к файлу 1 и выведет оставшуюся часть. Благодаря этому вы даже можете создавать обработчики ошибок. Если номер 1 выйдет из строя, он перейдет в номер 2 и отобразит его.

Были проблемы с ответами здесь, поэтому я придумал это, которое работает для меня (TM):

Есть два способа сделать это в зависимости от варианта использования.

1) Если вы хотите, чтобы командная строка Windows оставалась открытой, чтобы вы могли видеть результат выполнения и затем закрывать его; использовать

2) если вы хотите, чтобы командная строка Windows оставалась открытой и позволяла выполнять послесловия некоторых команд; использовать


Этот небольшой прием просит пользователя ввести ключ и сохраняет его в переменной% exitkey% (хотя эту переменную можно называть как угодно).

NB: пробел после '=' очень важен

Я знаю, что опаздываю, но я предпочитаю:

Таким образом, пользователь не может выйти, используя ввод.

  • Думаю, да, поскольку это улучшенный способ предотвратить закрытие консоли. Даже если пользователь нажимает клавишу, консоль остается открытой. Пользователь будет вынужден выйти, только закрыв окно консоли.

Легко, добавьте cmd в последнюю строчку bat, НО! если вы сбросите или очистите свой системный путь, вы должны запустить свой cmd с полным путем, например:

Например, у меня есть файл bat для сброса jdk до старой версии, например:

Командная строка, будучи запущенной, закроется только тогда, когда пользователь нажмет кнопку завершения работы или выполнит в ней команду exit. Но бывает и такое, что после командная строка закрывается сама, не сообщая пользователю о результатах отработанного сценария и не сообщая о причинах закрытия. Как правило, с таким поведением консоли приходится сталкиваться при выполнении скриптов — CMD или BAT -файлов.

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

Ну что же, понудить ее изменить свое поведения очень просто. Самый простой способ — это добавить в конец командного файла команду pause или специальный ключ, запускающую копию командной строки.

Команда pause

Главное, чтобы у вас имелись права на редактирование этого самого скрипта.

Отройте скрипт Блокнотом или любым другим текстовым редактором и добавьте в самый конец кода команду pause или cmd /k.

Команда cmd /k

Это два разных способа и работают они по-разному.

CMD

Команда cmd /k работает несколько иначе.

Будучи добавлена в конец сценария, она как-бы перезапускает консоль, выводя стандартное приглашение ввести новую команду.

Cmd /k

Если же добавить cmd /k в середину кода, его выполнение будет прервано и прекращено.

В этом основная разница между этими командами.

Тонкая настройка командной строки

Если нет желания возиться с каждым командным файлом, отредактируйте параметры работы самой командной строки.

Для этого открываем командой regedit редактор реестра и разворачиваем ветку:

HKCR\batfile\shell\open\command

В правой колонке меняем значение параметра по умолчанию с "%1" %* на cmd.exe /k "%1" %*.

RegEdit

Тоже самое проделываем с параметром по умолчанию в ветке HKCR\cmdfile\shell\open\command , для командных файлов формата CMD .

RegEdit

Вот и всё, отныне командная строка будет закрываться только по решению юзера, если только в сценарий не прописана команда exit .

Это, вероятно, вопрос о запуске, поскольку, несомненно, ответ ослепительно очевиден.

Я использовал Visual Studio в течение многих лет, но это первый раз, когда я создал любую консольную программу.

Когда я запускаю приложение, появляется окно консоли, появляется выход программы, а затем окно закрывается по мере выхода приложения.

Есть ли способ открыть его, пока я не проверил вывод или не просмотрел результаты после закрытия окна?

ОТВЕТЫ

Ответ 1

Если вы запускаете без отладки (Ctrl + F5), то по умолчанию он предлагает вам нажать return, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова в последней строке.

Ответ 2

Щелкните правой кнопкой мыши на вашем проекте

Свойства> Свойства конфигурации> Линкер> Система

Выберите Console (/SUBSYSTEM: CONSOLE) в опции SubSystem или вы можете просто ввести Console в текстовое поле!

Теперь попробуйте. это должно работать

Ответ 3

Вот способ для C/С++:

Ответ 4

Откройте меню отладки- > Нажмите Начать без использования

Ответ 5

Ответ 6

попробуйте вызвать getchar() прямо перед возвратом main() .

Ответ 7

(/SUBSYSTEM: CONSOLE) не работал для моего vs2013 (у меня его уже было).

"run without debugging" не является параметром, так как я не хочу переключаться между отладкой и просмотром вывода.

Решение, используемое в qtcreator до 2.6. Теперь, когда qt растет, vs идет другим путем. Насколько я помню, в vs2008 нам не нужны такие трюки.

Ответ 8

Здесь решение, что (1) не требует каких-либо изменений кода или точек останова, и (2) приостанавливается после завершения программы, чтобы вы могли видеть все, что было напечатано. Он остановится после F5 или Ctrl + F5. Основной недостаток заключается в том, что на VS2013 Express (как проверено) он не загружает символы, поэтому отладка очень ограничена.

Создайте командный файл. Я назвал мой runthenpause.bat со следующим содержимым:

Первая строка будет запускать любую команду, которую вы предоставляете, и до восьми аргументов. Вторая строка будет. пауза.

Откройте свойства проекта | Конфигурационные свойства | Отладка.

Теперь, когда вы запустите, runthenpause.bat запустит ваше приложение, и после того, как ваше приложение завершится, вы остановитесь, чтобы увидеть вывод консоли.

Я опубликую обновление, если выясню, как загрузить символы. Я пробовал /Z7 за этот, но безуспешно.

Ответ 9

просто введите свою последнюю строку кода:

Ответ 10

Начиная с Visual Studio 2017 (15.9.4) есть опция:

Автоматически закрывать консоль, когда отладка прекращается:

Сообщает Visual Studio закрыть консоль в конце сеанса отладки.

Ответ 11

Вы можете запустить исполняемый файл из командной строки. Таким образом, вы можете увидеть весь вывод. Или вы можете сделать что-то вроде этого:

и таким образом окно не будет закрываться, пока вы не введете данные для переменной a .

Ответ 12

добавить "| pause" в поле аргументов команды в разделе отладки в свойствах проекта.

Ответ 13

Просто нажмите CNTRL + F5, чтобы открыть его во внешнем окне командной строки (Visual Studio не контролирует его).

Если это не сработает, добавьте следующее в конец вашего кода:

Подождите, пока вы нажмете клавишу, чтобы закрыть окно терминала, как только код достигнет конца.

Если вы хотите сделать это в нескольких местах, поместите вышеуказанный код в метод (например, private void Pause() ) и вызовите Pause() всякий раз, когда программа достигает возможного конца.

Ответ 14

Несколько лучшее решение:

в начале вашей программы.

  • может использовать std:: exit()
  • может иметь несколько возвратов из основного
  • вы можете запустить свою программу под отладчиком
  • Независимый IDE (+ независимый от ОС, если вы используете трюк cin.sync(); cin.ignore(); вместо system("pause"); )
  • необходимо изменить код
  • не будет останавливаться на std:: terminate()
  • все равно произойдет в вашей программе вне сеанса IDE/debugger; вы можете предотвратить это под Windows, используя:

Ответ 15

Обязательно сделайте любой из них в конце функции main() и перед оператором return .

Ответ 16

В моем случае я испытал это, когда создал проект Empty C++ в версии VS 2017 для сообщества. Вам нужно будет установить для подсистемы значение "Консоль (/SUBSYSTEM: CONSOLE)" в разделе "Свойства конфигурации".

  1. Зайдите в "Просмотр", затем выберите "Менеджер недвижимости"
  2. Щелкните правой кнопкой мыши на проекте/решении и выберите "Свойство". Откроется страница свойств теста.
  3. Перейдите к компоновщику, затем выберите "Система"
  4. Нажмите "Подсистема" и появится выпадающий
  5. Выберите "Консоль (/SUBSYSTEM: CONSOLE)"
  6. Применить и сохранить
  7. В следующий раз, когда вы запустите свой код с помощью "CTRL +F5", вы должны увидеть результат.

Ответ 17

Вы также можете использовать эту опцию

Ответ 18

Ответ 19

Visual Studio 2015, импорт. Потому что я ненавижу когда примеры кода не дают необходимых импортов.

Переходим на Ubuntu

3 способа оставить команду работать после выхода из сеанса SSH

3 способа оставить команду работать после выхода из сеанса SSH

При работе с удаленной системой по протоколу SSH часто возникает необходимость запуска команды, на выполнение которой требуется много времени. Как вы, возможно, знаете, после закрытия соединения SSH все выполняющиеся задания будут прерваны. Встаёт вопрос, как сделать так, чтобы команда продолжала выполняться даже после того, как соединение SSH будет закрыто.

Оставляем команду работать после закрытия сеанса SSH

На самом деле, существует множество способов решить эту задачу. Ниже приводятся наиболее простые и понятные.

Метод 1 — screen

Инструмент screen — полноэкранный оконный менеджер с эмуляцией терминала VT100/ANSI позволяет безопасно отключиться от сеанса SSH без выхода из удалённых заданий. Он будет полезен тем, кто работает с несколькими удалёнными серверами. Утилита screen входит в стандартные репозитории большинства операционных систем на базе Linux. Для того, чтобы установить screen в Ubuntu выполните следующую команду:

Для запуска нового сеанса терминала выполните следующую команду:

Теперь можно запустить любую длительную команду. Для того, чтобы отключиться от сессии терминала, нажмите сочетание клавишь Ctrl+A, а затем d. В терминале появится что-то похожее на:

Чтобы вернуться в эту сессию, выполните команду

Вы увидите, что все запущенные процессы продолжают работу.
Если у вас есть несколько открытых сеансов screen , то при подключении нужно будет указать идентификатор сеанса. Для просмотра активных сеансов выполните следующую команду

Результат будет примерно таким:

Если нужно подключиться к сеансу с идентификатором 16648, выполните команду

Метод 2 — tmux

Утилита tmux представляет собой мультиплексор терминала (мы писали о нём ранее), который позволяет создавать несколько терминалов, доступ к которым осуществляется с одного экрана. Сеансы tmux можно отключать от экрана, при этом они будут продолжать работать в фоновом режиме. Впоследствии к отключенным сеансам можно вернуться, точно так же, как и в случае с утилитой Screen . Для того, чтобы установить tmux в Ubuntu выполните следующую команду:

Для запуска мультиплексора выполните следующую команду:

Для того, чтобы отключиться от сеанса, нажмите в tmux сочетание клавишь Ctrl+b,а затем d. Для получения списка активных сеансов выполните команду

В первом столбце будет указан номер сеанса, который нужно указывать при подключении:

Болшее подробную информацию можно найти в руководстве по tmux.

Метод 3 — nohup

Утилита nohup позволяет запускать команды, которые будут выполняться даже после отключения сеанса SSH. Это часть основных утилит GNU, и она уже установлена в системе. Использовать команду очень просто. После входа в удалённую систему достаточно выполнить:

И этого достаточно. Теперь можно закрыть закрыть сеанс SSH, удаленная задача будет продолжать выполняться.

Читайте также: