Завершение программы


Завершение работы программы и как закрыть зависшую программу

Завершение работы программы — процесс несложный, но для начинающего пользователя, будет полезно рассмотреть, запомнить и систематизировать все возможные способы, применяемые в данном случае. Можно подумать, что завершение работы всех программ — момент необязательный — ведь можно просто, нажав на значок Свернуть в правом углу окна программы, «убрать» её на Панель Задач, да и пусть себе работает, или просто оставить её на Рабочем столе, закрыв другими, более нужными окнами.

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

Поэтому, просто уясним для себя, что, плутая среди многочисленных открытых окон,  мы потеряем больше времени, чем ушло бы на то, чтобы программу всё-таки закрыть. Пусть этот момент станет своего рода полезным вкладом в развитие нашей самодисциплины.

Итак, завершение работы программы.

  • с помощью сочетания клавиш Alt+F4+fn:

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

  • с помощью кнопки Закрыть в окне программы (крестик в правом верхнем углу окна).
  • используя значок программы на Панели задач:

Работающая программа всегда отображается на Панели задач. При наведении курсора мышки на значок программы на Панели задач, появляется строка:

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

 При наведении на значок и клике ПКМ (правой кнопкой мыши), всплывает окошко большего размера. Кликаем на Закрыть окно ЛКМ (левой кнопкой мыши). 

  • следующий способ подходит, если открытое окно программы (приложения) содержит меню. Например, рассмотрим этот метод на примере программы Блокнот:

Просто проделываем («прокликиваем») короткий путь: Файл, Выход.

А вот теперь поговорим о том случае, когда «что-то пошло не так» и программа не закрывается, проще говоря, «зависла».

Как закрыть зависшую программу.

Наводим мышку на свободное от значков пространство на Панели уведомлений, кликаем ПКМ, выбираем Запустить Диспетчер задач.

Или пользуемся сочетанием клавиш Ctrl+Shift+Esc.

Откроется Диспетчер задач. Во вкладке Приложения находим по названию программу, которую не смогли закрыть, кликаем по ней один раз ЛКМ, чтобы выделить её, (если она не будет уже выделена). Напротив названия, в столбце Состояние, скорее всего, будет написано Не отвечает. Спускаемся вниз, находим кнопку Снять задачу и нажимаем на неё ЛКМ.

Закрываем Диспетчер задач. Работа программы будет остановлена.

А на сегодня всё.

Мы описали способы завершения работы программы и ответили на вопрос, как закрыть зависшую программу с помощью Диспетчера задач. В следующей статье мы поговорим о том, как быстро находить и запускать программы.

Жду ваши комментарии.

 

komponauka.ru

Как принудительно завершить работу программы в Windows 10?

Работая на компьютере, у пользователей могут возникнуть проблемы в работе программ, приложений и игр – их зависание. Зависание программы не дает пользователю выполнять никаких действий с этим приложением, а все несохранённые данные могут быть утеряны. При этом производительность компьютера резко падает, ведь зависшее приложение сильно нагружает процессор, а значение его нагрузки близко к 100%. Выходом из данной ситуации является принудительное завершение работы зависшей программы, для выполнения дальнейшей работы за компьютером.

Одним из радикальных способов решения проблемы, к которому прибегают множество начинающих пользователей – это перезагрузка компьютера с помощью кнопки Reset или затяжного нажатие кнопки Power, а некоторые принимают более кардинальные решения – выключение компьютера из сети. Каждый из этих способов восстановит работоспособность компьютера, но при этом велика вероятность появления ошибок и сбоев в работе операционной системы в дальнейшем. Частое выдёргивания вилки из розетки может повлиять на дальнейшую работу внутренней составляющей компьютера.

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

 

Также можно воспользоваться одной из комбинаций горячих клавиш. Читайте о способах вызова диспетчера задач.

Завершение зависшего приложения в Windows 10 можно выполнить тремя способами. В окне Диспетчера задач выберите зависшее приложение, после этого станет активна кнопка Снять задачу, на неё нужно нажать.

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

В этом режиме, в секции Приложения нужно найти программу, которая зависла (её состояние будет помечено как «Не отвечает»), выделите её и нажать на кнопку внизу программы Снять задачу, для её принудительного закрытия.

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

Для быстрого поиска можно использовать сортировку столбца ЦП (произойдёт сортировка процессов, начиная с больше нагружающих или с наименее нагружающих процессор). После чего остается выбрать зависший процесс (процент нагрузки на ЦП может составлять от 50 до 100%) и нажать кнопку Снять задачу.

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

procomputer.su

Завершение программы в Python - Stack Overflow на русском

Короткий ответ:Лучше использовать sys.exit()

Механизм завершения процесса в Python реализован через бросание исключения SystemExit, таким образом можно просто создать подобное исключение и программа завершится:

raise SystemExit # или даже передать число -- код ошибки завершения программы raise SystemExit(1)

Функция exit и аналогичная ей quit созданы для удобства работы в интерактивном режиме и их не рекомендуется использовать внутри скриптов:

They are useful for the interactive interpreter shell and should not be used in programs.

По факту они также просто поднимают исключение, и при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора:

>>> quit Use quit() or Ctrl-D (i.e. EOF) to exit >>> exit Use exit() or Ctrl-D (i.e. EOF) to exit

Использовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.

Есть также дополнительный метод для немедленного завершения программы: os._exit. У него довольно специфическая область применения, и там же есть замечание:

The standard way to exit is sys.exit(n)

Т.е. здесь даётся подтверждение того, что стандартный способ завершения программы -- это вызов sys.exit.

Функция os.abort, упомянутая вами, использует механизм сигналов процессу. Конкретно при вызове этой функции будет передан сигнал SIGABRT, что в linux приведёт к завершению программы и созданию дампа памяти процесса. Подобное завершение рассматривается операционной системой как аварийное, поэтому стоит не стоит использовать его для безаварийного завершения приложения.

По второй части вопроса. В Python есть развитая система контекстных менеджеров: классов, которые умеют работать с оператором with. Самое частое использование этого механизма встречается, вероятно, с файлами.

with open('filename') as my_file: print(my_file.read())

Этот код откроет файл, напечатает его содержимое на экран и закроет файл автоматически, даже если возникнет исключение при его печати.

Для классов, которые не приспособлены для работы с with есть функция closing в библиотеке contextlib. Из документации:

Code like this:

with closing(<module>.open(<arguments>)) as f: <block>

is equivalent to this:

f = <module>.open(<arguments>) try: <block> finally: f.close()

Вот небольшой пример работы этой функции:

import contextlib class Closeable: def close(self): print('closed') with contextlib.closing(Closeable()): pass # печатает closed

Теперь небольшое отступление о том, почему стоит использовать конструкцию with.

Известно, что программа завершится от любого необработанного исключения, а не только от SystemExit. Таким образом, если в вашем коде используются какие-то ресурсы, которые требуется правильным образом закрывать перед завершением работы, нужно оборачивать работу с ними в блоки try ... finally ....

Однако, при использовании конструкции with это оборачивание происходит автоматически, и все ресурсы закрываются корректно.

Так как выход из программы -- это всего лишь брошенное исключение, то и в случае использования функции sys.exit закрытие открытых в операторе with ресурсов произойдёт корректно:

with contextlib.closing(Closeable()): sys.exit() # напечатает closed

Вы можете писать также и свои классы, предоставляющие ресурсы или классы, оборачивающие другие, которые нужно уметь закрывать автоматически. Для этого используются методы __enter__ и __exit__.

Источники:

  1. Похожий вопрос с англоязычного StackOverflow
  2. Функции, добавляемые модулем site
  3. Документация по конструкции with
  4. Документация по функции closing
  5. Документация по исключению SystemExit
  6. Документация по функции os._exit
  7. Документация по функции sys.exit
  8. Документация по функции os.abort
  9. Описание системного сигнала SIGABRT

ru.stackoverflow.com

6 способов принудительного завершения программ в Mac OS X

Бывает, что ваш Mac выдает системные ошибки? Бывает, к сожалению. Загруженные приложения никак не реагируют на команды, а в памяти остаются один или несколько невыгруженных процессов. Эти и многие другие проблемные моменты решаются практически в пару нажатий. Настоятельно советую вам прочитать инструкцию, изложенную ниже, – так вы избавите себя от лишних хлопот при дальнейшей эксплуатации Мака.

Принудительное завершение активного приложения с клавиатуры

Для того, чтобы принудительно завершить активную задачу в Mac OS X, необходимо удерживать в течение нескольких секунд четыре кнопки Command + Option + Shift + Escape. Это самый быстрый способ выгрузить зависшее программное обеспечение в Mac OS X.

Окно «Принудительное завершение программ»

Сочетанием клавиш Command + Option + Escape мы добиваемся появления окна «Принудительное завершение приложения», после чего выбираем пункт «Завершить» для закрытия программы. Проделанная операция является более упрощенным вариантом команды в Мониторинге системы, позволяющей высвободить из памяти сразу несколько процессов.

Принудительное завершение программы из Дока

Необходимо выполнить следующую комбинацию: наводим курсор на иконку в Доке и, удерживая на клавиатуре ALT (Option), кликаем мышку. В результате зависшее приложение будет принудительно закрыто, причем без дополнительных подтверждений.

Принудительное завершение приложения из меню Apple

Удерживаем на клавиатуре клавишу Shift и делаем клик мышкой по логотипу Apple в верхней строке меню. Теперь выбираем команду «Завершить «…» принудительно». Данный способ наиболее простой для запоминания. Однако случается так, что компьютер никак не реагирует на нажатие этих клавиш.

Используем Мониторинг системы

Для того, чтобы запустить системную утилиту Мониторинг системы, следует нажать сочетание клавиш  Command + Space и ввести в окне Spotlight название программы. После появления диалогового окна находим «зависшее» приложение либо по названию (как правило, задачи, невосприимчивые к воздействию, помечаются красным цветом), либо по идентификационному номеру (ID), а затем нажимаем «Завершить процесс». Данный метод выгрузки из памяти ненужного ПО очень похож на тот, что используется в Windows, только вместо Мониторинга системы там Диспетчер задач.

Используем Терминал для выгрузки процессов

В том случае, если ни один из вышеперечисленных способов вам не помог, самый действенный метод в этой ситуации – воспользоваться командной строкой. Запустите Терминал и введите одну из следующих команд:

killall [название процесса]

К примеру, командой «killall Safari» вы убьете все процессы, связанные с интернет-браузером. А в том случае, если вам известен ID открытого приложения, которое можно найти с помощью команд «ps» или «ps aux», вы можете выгрузить «зависшую» программу следующим способом:

kill -9 [pid], где 9 как раз и есть вышеупомянутый параметр ID.

Следует быть крайне аккуратным при совершении действий, направленных на принудительное закрытия программ. Любое завершение процессов может вызывать аварийное прекращение работы операционной системы. А если вы работаете еще и с командной строкой, то это может привести к потере несохраненных данных и сбою системных настроек.

]]>

Присоединяйтесь к нам в Twitter, ВКонтакте, Facebook, Google+ или через RSS, чтобы быть в курсе последних новостей из мира Apple, Microsoft и Google.

]]>

www.macdigger.ru

std::exit — cppreference.com

void exit( int exit_code );

(до C++11)

[[noreturn]] void exit( int exit_code );

(начиная с C++11)

Нормально завершает программу.

Несколько действий по очистке происходят:

1) деструкторы для объектов со статическим временем хранения вызываются в обратном порядке выполнения их конструкторов или их динамических инициализаций, а также функции, отправленные в std::atexit, вызываются в обратном порядке их регистрации (последняя зарегистрированная вызывается первой). а) любые статические объекты, чья инициализация завершилась до вызова std::atexit для некоторой функции F, будут уничтожены после вызова F во время завершения программы. б) любые статические объекты, чьё построение началось после вызова std::atexit для некоторой функции F, будут уничтожены до вызова функции F во время завершения программы (этот пункт включает случай, когда std::atexit была вызвана в конструкторе статического объекта). (до C++11)
1) деструкторы объектов с потоковым и статическим временем хранения и функции зарегистрированные в std::atexit выполняются одновременно, при этом гарантируется то, что:

а) последний деструктор для потоковых (thread-local) объектов выполнится до первого деструктора для статических объектов.

б) если завершение конструктора или динамической инициализации для потокового или статического объекта A было выполнено до потокового или статического объекта B, завершение деструктора для B произойдёт до начала выполнения деструктора для A.

в) если завершение инициализации статического объекта A было до вызова std::atexit для некоторой функции F, то вызов F во время завершения программы произойдёт до начала вызова деструктора для A. г) если вызов std::atexit для некоторой функции F был до завершения инициализации статического объекта A, то начало вызова деструктора для A произойдёт до вызова F во время завершения программы. д) если вызов std::atexit для некоторой функции F1 был до вызова std::atexit для некоторой функции F2, то вызов F2 будет до F1 во время завершения программы.
(начиная с C++11)
1) Выполняется следующее:
  • Если функция зарегистрирована в atexit или любой деструктор статического или потокового объекта вызовет исключение, std::terminate будет вызван.
  • Если компилятор решил поднять динамическую инициализацию объекта до фазы статической инициализации non-local initialization, последовательность вызовов деструкции будет как и у динамической инициализации.
  • Если локальный (в блоке) статический объект был уничтожен, а затем эта функция была вызвана из деструктора другого статического объекта и выполнение дошло до определения этого объекта (или он был использован неявно, через указатель или ссылку), поведение не определено.
  • Если локальный (в блоке) статический объект был инициализирован во время построения подобъекта класса или массива, он будет уничтожен только после уничтожения всех подобъектов этого класса или всех элементов этого массива.

2) все буферы Си потоков будут сброшены и закрыты.

3) файлы созданные с помощью std::tmpfile будут удалены. 4) управление будет возвращено в среду выполнения. Если exit_code будет равен EXIT_FAILURE, зависимый от реализации код статуса, обозначающий неудачное завершение, будет возвращён. Иначе будет передан определённый реализацией код статуса.

Стек не разматывается: деструкторы объектов с автоматической временем хранения не вызываются.

[править] Отношение к функции main

Возвращение от функции main, как по оператору return, так и по достижению конца функции, вызывает обычное завершение функции (вызываются деструкторы для переменных с автоматическим временем хранения) и затем вызывается std::exit с аргументом из оператора return (или 0, если неявный return используется) в качестве exit_code

[править] Аргументы

exit_code - Код завершения программы

[править] Возвращаемое значение

(Нет)

[править] Пример

Запустить этот код

#include <iostream> #include <cstdlib>   class Static { public:   ~Static() { std::cout << "деструктор статического объекта\n"; } };   class Local { public: ~Local() { std::cout << "деструктор локальной переменной\n"; } };   Static static_variable; // деструктор статического объекта БУДЕТ вызван   void atexit_handler() { std::cout << "обработчик atexit\n"; }   int main() { Local local_variable; // Деструктор НЕ будет вызван const int result = std::atexit(atexit_handler); // обработчик будет вызван   if (result != 0) { std::cerr << "регистрация atexit не удачна\n"; return EXIT_FAILURE; }   std::cout << "проверка\n"; std::exit(EXIT_FAILURE); }

Вывод:

проверка обработчик atexit деструктор статического объекта

[править] See also

Вызывает аварийное завершение программы (без очистки) (функция) [править]
Регистрирует функцию, которая вызывается при вызове exit() (функция) [править]
Вызывает нормальное завершение программы без полной очистки (функция) [править]

ru.cppreference.com


Смотрите также