Как закрыть приложение в консоли
В последнее время я пытаюсь изучить С++ из этого веб-сайта. К сожалению, всякий раз, когда я пытаюсь запустить один из примеров кода, я вижу, что эта программа открыта примерно на полсекунды, а затем сразу же закрывается. Есть ли способ немедленно закрыть программу, чтобы я мог видеть плоды моих усилий?
ОТВЕТЫ
Ответ 1
Изменить: Как справедливо отмечает Чарльз Бейли в комментарии ниже, это не сработает, если в stdin есть символы, буферизированные, и на самом деле нет хорошего способа обойти это. Если вы используете прилагаемый отладчик, предлагаемое решение John Dibling, вероятно, является самым чистым решением вашей проблемы.
Тем не менее, я оставлю это здесь, и, возможно, кто-то найдет это полезным. Я часто использовал его в качестве быстрого взлома при написании тестов во время разработки.
В конце вашей функции main вы можете вызвать std::getchar();
Ответ 2
Если вы используете Visual Studio, и вы запускаете консольное приложение из среды IDE:
нажатие CTRL-F5 (запуск без отладки) запустит приложение и откроет окно консоли, пока вы не нажмете любую клавишу.
Ответ 3
Решение James работает для всех платформ.
В качестве альтернативы на Windows вы также можете добавить следующее перед возвратом из функции main :
Ответ 4
Если вы используете Microsoft Visual С++ 2010 Express и столкнулись с проблемой: CTRL + F5 не работает для того, чтобы консоль открылась после завершения программы, посмотрите этот поток MSDN.
Вероятно, ваша IDE настроена на закрытие консоли после запуска CTRL + F5; на самом деле, "пустой проект" в Visual С++ 2010 закрывает консоль по умолчанию. Чтобы изменить это, сделайте так, как предположил Microsoft-модератор:
Ответ 5
Обычно я просто устанавливаю точку останова на main() , закрывая фигурные скобки. Когда конец программы будет достигнут любым способом, на который ударит точка останова, и вы можете ALT-Tab в окне консоли, чтобы просмотреть результат.
Ответ 6
Почему бы не просто запустить программу с консоли, а запустить программу из cmd.exe, если вы используете Windows. Таким образом, окно остается открытым после завершения программы.
[EDIT]: Когда я использую KDevelop4, на вкладке внизу среды IDE имеется полностью установленный экземпляр Bash (CLI Linux). Это то, что я использую в таких обстоятельствах.
Ответ 7
До конца кода вставьте эту строку:
Это будет держать консоль до тех пор, пока вы не нажмете клавишу.
Ответ 8
Вызвать cin.get(); 2 раза:
Ответ 9
Если вы запустите свой код из компетентной среды разработки, например Code:: Blocks, среда IDE будет управлять консолью, которую она использует для запуска код, сохраняя его открытым, когда приложение закрывается. Вы не хотите добавлять специальный код, чтобы консоль открывалась, потому что это предотвратит его правильное функционирование, если вы используете его на самом деле, вне среды IDE.
Ответ 10
Если вы действительно отлаживаете свое приложение в Visual С++, нажмите F5 или зеленый треугольник на панели инструментов. Если вы на самом деле не отлаживаете его (у вас нет установленных точек останова), нажмите Ctrl + F5 или выберите "Начать без отладки" в меню (обычно это в меню "Отладка", которое, я согласен, сбивает с толку.) Это будет немного быстрее, и что более важно для вас, остановится в конце, если вам не придется менять свой код.
В качестве альтернативы откройте командную строку, перейдите в папку, в которой находится ваш exe, и запустите ее, набрав ее имя. Таким образом, когда он закончил выполнение командной строки, она не закрывается, и вы можете увидеть результат. Я предпочитаю оба этих метода добавлять код, который останавливает приложение так же, как и его завершение.
Ответ 11
Хорошо, я предполагаю, что вы работаете в Windows с помощью Visual Studio. почему? Хорошо, потому что если вы находитесь на какой-то ОС Linux, вы, вероятно, будете запускать ее с консоли.
В любом случае вы можете добавить crap в конец вашей программы, как предлагают другие, или просто нажать CTRL + F5 (начать без отладки), а Visual Studio покинет консоль до завершения.
Ответ 12
Добавьте следующие строки перед любой функцией exit() или перед любым return в main() :
Ответ 13
Просто добавьте следующее в конце своей программы. Он попытается зафиксировать некоторую форму ввода пользователя, таким образом, он не позволит автоматически закрывать консоль.
Ответ 14
Для Visual Studio (и только Visual Studio) следующий фрагмент кода дает вам приглашение "дождаться нажатия клавиши для продолжения", которое действительно ждет, когда пользователь будет явно нажимать новый ключ, сначала очистив входной буфер:
Обратите внимание, что для этого используется макрос tchar.h для совместимости с несколькими "наборами символов" (как их называет VС++).
Ответ 15
Ответ 16
Ответ 17
Посмотрите, есть ли у вашей IDE флажок в настройке проекта, чтобы окно оставалось открытым после завершения программы. Если нет, используйте std::cin.get(); для чтения символа в конце основной функции. Однако не забудьте использовать только линейный вход (std:: getline) или обрабатывать оставшиеся непрочитанные символы в противном случае (std:: ignore до новой строки), потому что иначе конец .get() будет читать только выведенный мусор непрочитанных ранее.
Ответ 18
Вы даже можете объявить целое число в начале вашей функции main() (скажем int a; ) и поместить std::cin >> a; непосредственно перед возвращаемым значением. Таким образом, программа будет работать до тех пор, пока вы не нажмете клавишу и не войдете.
Ответ 19
Это работает хорошо:
Если вы сначала очистите буфер, это не будет проблемой при чтении следующего. По какой-то причине cin.ignore(1) не работает, оно должно быть 2.
Ответ 20
Все, что вам нужно сделать, установите переменную для x, затем просто введите это перед возвратом 0;
Ответ 21
Вы всегда можете создать пакетный файл. Например, если ваша программа называется helloworld.exe, некоторый код будет:
Ответ 22
Я помещаю точку останова при последнем возврате 0 программы. Он отлично работает.
Ответ 23
Ответ 24
Я использовал cin.get() , и это сработало, но в один прекрасный день мне нужно было использовать еще один cin.get([Array Variable]) до этого, чтобы захватить строку строки с пустым символом в середине. поэтому cin.get() не закрыл окно командной строки. Наконец, я нашел другой способ: Нажмите CTRL + F5, чтобы открыть его во внешнем окне, а Visual Studio больше не контролирует его. Просто спросите вас о закрытии после запуска последних команд.
Ответ 25
Я просто делаю это:
Примечание: очистка буфера cin и это необходимо только в том случае, если вы использовали cin в какой-то момент раньше в вашей программе. Кроме того, использование std:: numeric_limits:: max(), вероятно, лучше, чем INT_MAX, но оно немного многословно и обычно не нужно.
Ответ 26
Я попытался добавить функцию getchar() в конец. Но это не сработало. Так что я сделал, добавлял две функции getchar() один за другим. Я думаю, что первый getchar() поглощает клавишу Enter , которую вы нажимаете после последнего ввода данных. Поэтому попробуйте добавить две функции getchar() вместо одной
Ответ 27
Аналогичная идея для ответа yeh, минимальная альтернатива.
Создайте пакетный файл со следующим содержимым:
Затем используйте командный файл.
Ответ 28
Я не заметил, что кто-то еще разместил это, так что вот оно.
Ответ 29
просто используйте cin.ignore() прямо перед возвратом 0; дважды
Ответ 30
Если вы используете Windows, вы можете сделать system("pause >nul"); или system("pause"); . Он запускает консольную команду для приостановки программы, пока вы не нажмете клавишу. >nul препятствует тому, чтобы он говорил Press any key to continue. .
exit Функция, объявленная в <stdlib.h> , завершает программу на C++. Значение, передаваемое в качестве аргумента, exit возвращается операционной системе в качестве кода возврата программы или кода выхода. Принято, чтобы нулевым кодом возврата обозначалось, что программа завершена успешно. Константы EXIT_FAILURE и EXIT_SUCCESS , также определенные в, можно использовать <stdlib.h> для обозначения успеха или неудачи программы.
Выдача return инструкции из main функции эквивалентна вызову exit функции с возвращаемым значением в качестве аргумента.
Функция abort
abort Функция, также объявленная в стандартном включаемом файле <stdlib.h> , завершает программу на C++. Разница между exit и заключается в том abort , что exit позволяет выполнять обработку завершения при завершении выполнения C++ (вызываются деструкторы глобальных объектов), но abort немедленно завершает программу. abort Функция обходит обычный процесс уничтожения инициализированных глобальных статических объектов. Он также обходит любую специальную обработку, указанную с помощью atexit функции.
Функция atexit
Используйте atexit функцию, чтобы указать действия, которые выполняются до завершения программы. Глобальные статические объекты, инициализированные до уничтожения вызова atexit , не будут уничтожены до выполнения функции выхода.
return в main
Выдача return инструкции из main функционально эквивалентна вызову exit функции. Рассмотрим следующий пример.
exit Операторы и return в предыдущем примере функционально идентичны. Как правило, для C++ требуются функции, которые возвращают типы, отличные от void возвращаемых значений. main Функция является исключением; она может завершаться без return оператора. В этом случае он возвращает зависящее от реализации значение для вызывающего процесса. return Оператор позволяет указать возвращаемое значение из main .
Уничтожение статических объектов
При вызове exit или выполнении return инструкции из main статические объекты уничтожаются в обратном порядке их инициализации (после вызова метода, atexit если он существует). В следующем примере показано выполнение такого процесса инициализации и удаления.
Пример
В следующем примере статические объекты sd1 и sd2 создаются и инициализируются перед записью в main . После завершения выполнения этой программы с помощью return инструкции сначала sd2 уничтожается, а затем sd1 . Деструктор класса ShowData закрывает файлы, связанные с этими статическими объектами.
Другой способ записать этот код — объявить объекты ShowData с областью видимости блока, в результате чего они будут удаляться при выходе из области.
Зависание программ — обычное явление для любых вычислительных машин под управлением любых ОС, будь это смартфон, настольный ПК или сверхмощный серверный компьютер. Нас интересует ситуация с зависанием приложений в операционных системах Windows.
Стандартный способ закрытия зависших программ
В любых операционных системах предусмотрен программный компонент, отвечающий за отображения списка запущенных процессов. Одна из многочисленных его функций — принудительное завершение работы приложений. В ОС Windows за это отвечает системная программа "Диспетчер задач". С ее помощью довольно просто принудительно завершить работу любого (почти) процесса:
- Для вызова "Диспетчера задач" нажмите на клавиатуре комбинацию клавиш "Ctrl + Shift + Esc" или "Ctrl + Alt + Delete". Также его можно запустить из контекстного меню, вызываемого правым кликом по пустой области Панели задач.
- Возможны два варианта отображения "Диспетчера задач". Первый — краткий — имеет следующий вид:
- В этом случае "Диспетчер задач" отображает только те приложения, которые имеют видимые окна. Выделите нужную программу, затем нажмите кнопку "Снять задачу".
- Если в списке не отображено зависшее приложение, кликните по элементу "Подробнее" в левом нижнем углу.
- Теперь "Диспетчер задач" отобразит все запущенные в данный момент процессы. Вам останется найти тот, что завис. Проще всего это сделать, кликнув по элементу "Состояние" в верхней части окна. Напротив названия зависшего приложение будет стоять метка "Не отвечает". Выделяем процесс мышкой, затем жмем клавишу "Delete" или кнопку "Снять задачу" в правом нижнем углу.
К сожалению, стандартный менеджер процессов Windows не всегда справляется со своей задачей. При попытке завершения работы зависшего (или даже не зависшего) процесса на экране может отобразиться какая-нибудь ошибка либо вообще ничего не произойти (программа как отображалась в списке "Диспетчера задач", так и продолжает в нем отображаться).
В таких случаях можно воспользоваться командной строкой либо прибегнуть к помощи сторонних утилит. Начнем с первого способа.
Закрытие зависшей программы через командную строку
Из командной строки (консоли) Windows можно выполнять множество различных задач на компьютере, включая принудительное завершение работы любых процессов. Для нашего конкретного случая командную строку следует запустить от имени администратора, иначе закрыть зависшее приложение не выйдет (консоль отобразит ошибку).
- Если у вас установлена операционная система Windows 8, 8.1 или 10: кликните правой кнопкой мыши по значку "Пуск" в левом нижнем углу экрана, затем выберите в открывшемся контекстном меню пункт "Командная строка (администратор)".
- Если у вас установлена операционная система Windows 7: в поисковой строке меню "Пуск" наберите cmd или командная строка, кликните правой кнопкой мыши по значку найденного приложения и выберите пункт "Запуск от имени администратора".
- Универсальный способ: откройте системный локальный диск (куда установлена система Windows), в нем перейдите в папку "Windows", затем в папку "System32". Найдите среди множества файлов программу с названием "cmd" или "exe" (одно и то же), кликните по значку правой кнопкой мыши и выберите из контекстного меню пункт "Запуск от имени администратора".
- Любое из действий приведет к запуску командной строки, которая имеет следующий вид:
Все дальнейшие действия выполняем в командной строке:
- Наберите в консоли команду tasklist и нажмите клавишу "Enter". В окне командной строки отобразятся все запущенные процессы. Для удобства их просмотра можно растянуть окно по вертикали.
- Для чего нам нужен этот список? Обратите внимание на колонку "PID". В ней указаны уникальные идентификационные номера запущенных процессов. Найдите в левой колонке "Имя образа" зависшую программу и определите, какой ей присвоен идентификационный номер.
- Для примера завершим работу программы Microsoft В нашем случае ей присвоен номер (PID) 2640.
- Теперь остается выполнить команду, предназначенную для принудительного завершения работы процесса — taskkill. Зная PID процесса, это сделать несложно. Для этого вводим команду в консоль следующим образом (после — нажимаем клавишу ввода):
taskkill /pid 2640
Закрытие зависших программ через командную строку в автоматическом режиме
Данный способ позволяет парой кликов мышью завершить работу вообще всех программ, имеющих в "Диспетчере задач" статус "Не отвечает". Заключается он в создании специального ярлыка на рабочем столе, который, по сути, запускает консоль Windows, отправляя ему команду на снятие подвисших задач.
Создать такой ярлык несложно:
- Кликните правой кнопкой мыши по пустой области рабочего стола (можно также в какой-нибудь папке), выберите в контекстном меню пункт "Создать", затем "Ярлык".
- Откроется мастер создания ярлыков. В поле "Укажите расположение объекта" скопируйте следующую строку (кавычки обязательны):
taskkill.exe /f /fi "status eq not responding"
- Кликните "Далее", затем введите любое имя для созданного ярлыка и нажмите "Готово".
Теперь на рабочем столе (или в папке) появится ярлык с заданным ранее именем. Вам останется кликнуть по нему два раза мышью, чтобы закрыть любое зависшее приложение.
Если у вас Windows 7 или выше, рекомендуем запускать этот ярлык от имени администратора. Чтобы не делать это вручную каждый раз, немного поменяем настройки запуска этого ярлыка:
- Кликните по ярлыку правой кнопкой мыши и выберите пункт "Свойства".
- Во вкладке "Ярлык" кликните по кнопке "Дополнительно". Откроется небольшое окошко, в котором нужно установить флажок напротив элемента "Запуск от имени администратора", затем нажать "ОК".
Программы для закрытия зависших процессов
Существует ряд утилит, созданных специально для принудительного завершения работы зависших процессов. Рассмотрим несколько наиболее популярных.
SuperF4
Бесплатная утилита SuperF4 позволяет нажатием комбинации клавиш "Ctrl + Alt + F4" завершить работу любой программы, находящейся на переднем плане (т.е. в фокусе). Само приложение не имеет каких-либо видимых окон — только значок в трее, при помощи которого утилитой можно управлять при помощи мыши.
Также у программы SuperF4 имеется альтернативный режим работы. Если выбрать из контекстного меню, вызываемого правым кликом по значку в трее (показано на скриншоте выше), пункт "xkill" либо нажать комбинацию клавиш "Win + F4", курсор мыши примет следующий вид:
Теперь останется навести курсор на любое открытое окно и кликнуть по нему левой кнопкой мыши. Программа автоматически обнаружит процесс, которому принадлежит окно (даже если тот зависло), и принудительно завершит его работу.
ProcessKO
ProcessKO — это уже более продвинутый "киллер" запущенных процессов. Программа распространяется абсолютно бесплатно, поддерживает русский язык (т.е. в данном случае предусмотрен пользовательский интерфейс).
Утилита ProcessKO имеет несколько функций, хотя все они только и делают, что завершают работу запущенных программ. Наиболее интересная нам функция — моментальное снятие задачи — запускается из выпадающего меню "Момент К.О.". Вернее, при клике по этому меню на экране отображается список запущенных процессов — остается выбрать любой из них, и программа ProcessKO тут же завершит его работу.
Отметим, что утилита ProcessKO способна завершать работу системных служб. Примерно так будет выглядеть список запущенных системных процессов, если в меню "Момент К.О." раскрыть подменю "System32":
Если вам часто приходится сталкиваться с зависанием каких-либо определенных программ, их можно добавить в список "Избранных". Программа ProcessKO сохранит название этого процесса и в будущем предоставит быстрый доступ к нему. Для этого раскройте меню "Избранное", а в нем — подменю "Добавить", затем выберите нужный процесс (можно и системную службу). Кстати, вы можете добавить программу в список избранных, указав путь к исполняемому EXE-файлу (подменю "Из файла").
Еще одна интересная функция — завершение работы процесса по таймеру. Но срабатывает она не один раз, а бесконечно. Т.е. по истечению указанного времени таймер сбрасывается до исходного состояния, вновь начинается отсчет, и выбранный процесс (или несколько) снова завершается (если к тому моменту был запущен повторно):
Ну и последнее — как и в случае с предыдущей программой, ProcessKO умеет завершать работу программы по открытому и находящемуся в фокусе окну. Для этого также служит комбинация клавиш "Ctrl + Alt + F4". А если выполнить комбинацию "Ctrl + Alt + F5", то программа будет перезапущена.
Task Killer
Бесплатная программа ( скачать можно здесь )
По названию понятно, что основная функция этой утилиты — "убийство" задач (программ/процессов). Приложение Task Killer полностью бесплатное, имеет простой пользовательский интерфейс (и тот — лишь для настройки), поддерживает русский язык.
Скажем сразу, Task Killer больше подходит для управления запущенными службами, однако в нем присутствует функция завершения работы программ с видимыми окнами и связанными с ними процессов (т.е. если программа, окно которой отображено на экране, запустила другую программу — Task Killer "узнает" об этом). Так, чтобы закрыть зависшую программу, нужно выполнить 2 простых шага:
- Кликнуть левой кнопкой мыши по значку Task Killer в системном трее.
- Выбрать из представленного списка программу, работу которой следует завершить.
Если нужная программа не отразилась в списке, попробуйте найти ее в меню "Окна".
Если же требуется остановить или, наоборот, запустить остановленную в данный момент службу, откройте меню "Службы". Правда, список служб перекрывает весь экран и даже может не вместиться в него (зависит от разрешения экрана) — это неудобно.
Есть у программы Task Killer одна удобная функция — возможность отображения на экране рядом с курсором мыши (поверх всех окон) всплывающего меню (то, что отображается при клике по значку в трее), списка открытых окон, программ или служб. Любое из перечисленного вызывается путем нажатия горячих клавиш. По умолчанию они не заданы. Нужно войти в настройки программы (кликните по значку в трее правой кнопкой мыши и выберите пункт "Настройки"), затем открыть вкладку "Горячие клавиши" и задать нужную комбинацию. Теперь после выполнения заданной комбинации на экране будет отображаться тот или иной объект.
One Click App Killer
И последняя в нашем обзоре программа — One Click App Killer. Как и в случае с SuperF4, эта утилита не имеет пользовательского интерфейса. Более того, она даже не размещает иконку в системном трее. Все, что требуется сделать — запустить программу с ярлыка на рабочем столе, а затем навести измененный курсор (тот "превратится" в маленький прицел) на любое открытое окно (зависло оно или нет — без разницы) и кликнуть левой кнопкой мыши. После этого зависшая программа будет закрыта.
Остались вопросы, предложения или замечания? Свяжитесь с нами и задайте вопрос.
Н ередко приложение перестает отвечать на запросы в Windows 10. Когда это происходит, Вы можете принудительно завершить работу приложения. Вот как принудительно закрыть приложение в Windows 10.
Попробуйте комбинацию клавиш
Это расстраивает, когда приложение, которое Вы используете, внезапно зависает. Вы нажали кнопку «X» как минимум 20 раз, чтобы закрыть зависшую программу, но это не помогло. Есть лучший способ.
Когда приложение находится в фокусе, нажмите Alt + F4 на клавиатуре, чтобы закрыть его. Если рабочий стол Windows находится в фокусе, вместо этого Вы увидите приглашение «Завершение работы Windows».
Принудительное завершение работы с помощью диспетчера задач
Чтобы открыть диспетчер задач, Вы можете нажать Ctrl + Shift + Esc на клавиатуре или щелкнуть правой кнопкой мыши панель задач Windows и выбрать «Диспетчер задач» из меню.
Открыв диспетчер задач, выберите задачу, которую Вы хотите принудительно завершить, а затем выберите «Завершить задачу».
Если Вы не видите название приложения в списке, нажмите «Подробнее» и найдите его в списке на вкладке «Процессы».
Зависшая программа закроется.
Принудительное закрытие приложения с помощью командной строки
Вы можете принудительно закрыть приложение из командной строки. Откройте командную строку, набрав «cmd» в строке поиска Windows, а затем выбрав приложение «Командная строка» из результатов поиска.
В командной строке введите tasklist и нажмите «Enter». После запуска в командной строке отобразится список запущенных в данный момент программ, служб и задач.
Список может быть огромным, поэтому просто не забудьте добавить .exe в конец имени программы. Когда Вы будете готовы принудительно закрыть приложение, выполните эту команду:
Например, если бы Вы хотели принудительно закрыть Блокнот, то должны были выполнить эту команду:
Конечно, Вы всегда можете перезагрузить или выключить компьютер, чтобы закрыть приложение, которое зависло.
Читайте также: