——- Кто не задает вопросы — тот не получает ответы
Как закрыть программу через командную строку, bat-файл в Windows и терминал в Linux
Здравствуйте, друзья сайта itswat.ru . Уверен, что в вашей практике бывали случаи, когда какой-либо процесс негативно сказывался на производительности компьютера. И даже зная имя, не всегда получается прекратить его работу стандартными способами, например, через диспетчер задач. Ещё одна распространённая ситуация – некое приложение неожиданно зависло и закрываться никак не желает. На помощь придёт cmd – это внутреннее средство Windows, позволяющее управлять процессами в операционной системе посредством ввода в специальное окно текстовых команд. Давайте я вам расскажу, как закрыть программу через командную строку. Это совсем несложно.
Запустить cmd и отобразить все процессы
Запустить cmd можно несколькими способами:
Нажмите на клавиатуре Win (кнопочка с плывущим окошком) и R (языковой регистр не имеет значения). В появившееся окно «Выполнить» впишите cmd и нажмите ОК.
Нажмите Win и X, запустите нужное средство от имени администратора.
Напишите в поисковой строке Пуска cmd и запустите приложение cmd.exe двумя быстрыми щелчками.
Или же начните писать в поисковой строке Пуска «команды…» и запустите первое приложение из результатов поиска двумя быстрыми щелчками.
Друзья, если вы справились с запуском cmd, значит, точно сможете найти через неё и убить тот самый злополучный процесс.
Увидеть программу, которая зависла, поможет команда tasklist. Её нужно написать в появившемся чёрном окошке (там, где мигает курсор), после чего нажать клавишу Enter. Способ одинаково актуален для всех версий Windows – 7, 8 и 10. Результатом этого действия будет появление списка всех запущенных на ПК процессов.
Вам остаётся только отыскать в появившемся перечне программу, создающую проблемы, и запомнить её PID (цифровой идентификатор). Чтобы было более понятно, рассмотрим пример. Я запущу в Windows 10 приложение для проведения видеоконференций, найду Zoom в перечне процессов через командную строку и покажу, как его завершить.
Кроме имени программы, вы увидите несколько столбиков значений. Соседний с названием столбец (цифры) — это PID (идентификатор), а последний – количество килобайт, которое он, работая, отнимает у системы.
В моём случае Zoom обозначился двумя процессами, завершение которых из командной строки возможно и по отдельности, и одновременно посредством команды taskkill. Кроме самой команды, понадобится ещё ввести ключ /f, а также:
Атрибут IM, если мы будем использовать имя программы, тогда завершатся оба процесса. Вот как это выглядит в данном примере: taskkill /f /IM Zoom.exe (после ввода команды нужно нажать Enter).
Атрибут PID, если мы будем вводить не имя, а идентификатор, чтобы убить один конкретный процесс: taskkill /f /PID.
Если вы не знаете, что именно тормозит вашу систему, то можете попробовать с помощью командной строки завершить все процессы и закрыть все окна, которые зависли. Для этого используйте атрибут /fi (установка фильтра) и статус «не отвечает». Команда будет выглядеть так: taskkill /f /fi «status eq not responding».
Используем «батник»
Друзья, если некая программа порядком подпортила вам нервы, постоянно запускаясь и тормозя систему, то вы можете в момент необходимости быстро закрыть её через bat-файл (в простонародье «батник»), который нужно предварительно создать. В таком случае вам не придётся постоянно обращаться к cmd и вписывать одну и ту же команду по десять раз на дню.
Батник сооружается следующим образом:
Создайте новый текстовый документ («Блокнот»), для чего сделайте правый щелчок на пустом пространстве рабочего стола, обратитесь к инструменту «Создать» и выберите соответствующий пункт.
Откройте полученный документ двумя быстрыми щелчками впишите в него команду taskkill /F /IM zoom.exe (у меня имя zoom.exe, вы вписываете название своей проблемной утилиты).
Через «Файл» перейдите к инструменту «Сохранить как…», задайте любое имя (я написал «Закрыть»), после него поставьте точку и напишите расширение bat (смотрите фото).
Нажмите «Сохранить» и на рабочем столе появится батник.
Когда злополучная программа вновь запустится и загрузит ПК, дважды быстро щёлкните по подготовленному bat-файлу, чтобы её закрыть.
Команды для терминала в Линукс
Инструкции, описанные мной выше, подойдут для пользователей Windows. Пользователи «Линукс» также могут закрыть любое приложение через текстовые команды, используя для этого терминал. Он запускается нажатием клавиш Ctrl + Alt + T. Сначала необходимо узнать идентификатор процесса, который требуется убить. В этом поможет команда ps aux | grep [ИМЯ] или pgrep [ИМЯ]. Потом следует использовать команду kill [ID] или pkill [ID]. Чтобы закрыть сразу все окна некой программы, например, браузера, можно использовать команду killall [ИМЯ].
Друзья, на этом я заканчиваю статью. Надеюсь, в ней вы найдёте что-то полезное для себя. Жду ваших вопросов и оценок моей работы в комментариях. До свидания.
Как закрыть терминал без убийства запущенной в нём команды
Иногда нужно «отвязать» программа от окна терминала, в котором она запущена. Например, вы подключились к удалённому серверу по SSH, запустили задачу, которая не является демоном, но выполнение которой требует большого времени (может быть дни и месяцы). Если вы закроете терминал или просто оборвёте SSH сессию, то запущенная программа попросту прекратит свою работу.
Ещё один пример ситуации, когда это может понадобиться, вы работаете с безголовым сервером (без графического окружения рабочего стола) и по этой причине не можете открыть несколько терминальных окон. Поэтому вы хотите перевести программу в фон, чтобы продолжить работу с терминалом.
В этой статье описаны варианты, как закрыть терминал без остановки запущенной в нём программы.
Для этого есть два решения:
Давайте разберёмся, а в чём различия между
Давайте для начала взглянем, что происходит, когда команда запускается из интерактивной оболочки (подключённой к терминалу) без & (и без какого либо перенаправления). Поэтому давайте предположим, что вы напечатали просто foo (в качестве примера команды), тогда:
Создаётся процесс foo.
Процесс наследует stdin (стандартный ввод), stdout (стандартный вывод), и stderr (стандартный вывод ошибок) из оболочки. Следовательно, он также подключён к тому же терминалу.
Если оболочка получает SIGHUP (сигнал, посылаемый процессу для уведомления о потере соединения с управляющим терминалом пользователя), она также отправляет SIGHUP процессу (что обычно приводит к завершению процесса).
В противном случае оболочка ожидает (является заблокированной) пока процесс завершиться.
Теперь давайте посмотрим, что происходит, когда мы переводим процесс в фон, это делается набором foo &:
Создаётся запущенный процесс foo.
Процесс наследует stdout/stderr из оболочки (поэтому он всё ещё пишет в терминал).
Процесс, в принципе, также наследует stdin, но как только он пытается читать из stdin, он приостанавливается.
Он помещается в список фоновых задач, которыми управляет оболочка, что в частности означает:
Он выводиться по jobs и к нему можно получить доступ используя %n (где n – это номер задачи).
Его можно перевести на задачу переднего плана, используя fg, в этом случае он продолжится, будто бы вы не использовали с ним & (и если раньше он останавливался, при попытке читать стандартный ввод, теперь он может работать с чтением стандартного ввода из терминала).
Если оболочка получает SIGHUP, она также отправляет SIGHUP процессу. В зависимости от оболочки и возможных включённых опций оболочки при завершении оболочки она также будет отправлять процессу SIGHUP.
Теперь disown удаляет задачу из списка задач оболочки, следовательно все приведённые выше подпункты больше не применяются (включая отправку оболочкой процессу сигнала SIGHUPl). Тем не менее, помните, что он всё ещё подключён к терминалу, поэтому если терминал разрушен (что может случиться если это был pty, как те, которые создаются xtermor или ssh, и контролирующая программа завершена закрытием xterm или закрытием SSH-подключения), программа потерпит неудачу, как только она попытается прочитать из стандартного ввода или записать в стандартный вывод.
Что делает nohup, с одной стороны, она активно отделяет процесс от терминала:
Она закрывает стандартный ввод (программа будет неспособна читать любой стандартный ввод, даже если она запущена на переднем плане. Она не закрывается если не получает сообщение об ошибке или EOF).
Она перенаправляет стандартный вывод и стандартный вывод ошибок в файл nohup.out, поэтому программа не потерпит неудачу во время записи в стандартный вывод если терминал потерпит неудачу, то чтобы процесс не писал, это не будет потеряно.
Она не даёт процессу получить SIGHUP (отсюда и её имя).
Помните, что nohup не удаляет процесс из контроля задач оболочки и также не переводит его в фон (но поскольку задача nohup на переднем плане практически бесполезно, то обычно она запускается с использованием &). Например, в отличие от disown, оболочка всё ещё будет говорит вам, когда задача nohup завершена (конечно, если оболочка не закрылась раньше этого).
& переводит задачу в фон, это приводит к блокировке попыток читать стандартный ввод и делает так, что оболочка не ждёт завершения задачи.
disown удаляет процесс из контроля задач оболочки, но всё ещё оставляет её связанной с терминалом. Одним из результатов этого является то, что оболочка не отправит SIGHUP. Очевидно, что это может быть применимо только к фоновым задачам, поскольку вы не можете ввести это когда запущена работа на переднем плане.
nohup отсоединяет процесс от терминала, перенаправляет его вывод в nohup.out и предохраняет его от SIGHUP. Одним из эффектов (в честь которого и названа команда) является то, что процесс не получит любой отправленный NOHUP. Он абсолютно независим от контроля задач и может, в принципе, использоваться для задач на переднем плане (хотя это не особо полезно).
Если использовать вместе все три disown, nohup и &, то процесс будет запущен в фоне, удалён из контроля задач оболочки и эффективно отключён от терминала.
nohup выполняет КОМАНДУ игнорируя сигналы обрыва терминальной линии.
Возможные опции nohup:
Если стандартный ввод является терминалом, то он берётся из нечитаемого файла.
Если стандартный вывод является терминалом, то вывод добавляется в «nohup.out», если возможно, иначе в «$HOME/nohup.out».
Если стандартный поток ошибок является терминалом, то он перенаправляет в стандартный вывод. Чтобы записать вывод в ФАЙЛ, используйте «nohup КОМАНДА > ФАЙЛ».
ЗАМЕЧАНИЕ: ваша оболочка может предоставлять свою версию nohup, которая обычно перекрывает версию, описанную здесь. Пожалуйста, обращайтесь к документации по вашей оболочке, чтобы узнать, какие ключи она поддерживает.