Остановка процесса. Временная остановка выполнения процесса

18.07.2021

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

В этой статье мы рассмотрим несколько самых распространенных способов завершить процесс Linux. Опишем подробно как происходит остановка процесса и как все сделать правильно.

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

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

  • SIGINT - самый безобидный сигнал завершения, означает Interrupt. Он отправляется процессу, запущенному из терминала с помощью сочетания клавиш Ctrl+C. Процесс правильно завершает все свои действия и возвращает управление;
  • SIGQUIT - это еще один сигнал, который отправляется с помощью сочетания клавиш, программе, запущенной в терминале. Он сообщает ей что нужно завершиться и программа может выполнить корректное завершение или проигнорировать сигнал. В отличие от предыдущего, она генерирует дамп памяти. Сочетание клавиш Ctrl+/;
  • SIGHUP - сообщает процессу, что соединение с управляющим терминалом разорвано, отправляется, в основном, системой при разрыве соединения с интернетом;
  • SIGTERM - немедленно завершает процесс, но обрабатывается программой, поэтому позволяет ей завершить дочерние процессы и освободить все ресурсы;
  • SIGKILL - тоже немедленно завершает процесс, но, в отличие от предыдущего варианта, он не передается самому процессу, а обрабатывается ядром. Поэтому ресурсы и дочерние процессы остаются запущенными.

Важно понимать, что нужно дать процессу возможность завершиться корректно. Желательно, чтобы порты и сокеты были освобождены, закрыты и удаленны временные файлы. Поэтому никогда не передавайте сразу SIGKILL. Передавайте сигналы завершения в последовательности, как они перечислены выше.

Сначала Ctrl+C , если это возможно, затем SIGTERM - он хоть и завершает процесс, но делает эту культурно, и только в крайнем случае SIGKILL. А теперь рассмотрим как убить процесс по pid Linux на практике. Если вы всегда используете SIGKILL, тогда на ум приходит такая картинка:

Как убить процесс Linux?

Для передачи сигналов процессам в Linux используется утилита kill. Ее синтаксис очень прост:

$ kill -сигнал pid_процесса

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

Допустим, у нас выполняется утилита ping. Мы хотим ее завершить с помощью kill. Тогда, сначала мы узнаем ее идентификатор с помощью команды ps:

ps aux | grep ping

В первой строчке отобразится сама утилита ping, а во второй сама программа ps. Берем нужный PID и завершаем процесс с помощью SIGTERM:

kill -TERM 20446

И только если после этой команды процесс продолжил висеть, а это вы можете проверить, выполнив ps. Только теперь можно выполнить SIGKILL:

kill -KILL 20446

Теперь снова проверяем:

Если процесс запущен от суперпользователя, то, естественно, вам нужно использовать sudo. Не всегда удобно уничтожать процесс по его PID, как минимум, потому, что вам этот PID нужно еще узнать. Мы могли бы нагородить сложных конструкций с использованием xargs, чтобы вычислять автоматически pid по имени процесса и сразу же его завершать, но в этом нет необходимости. Уже существуют специальные утилиты.

Как завершить процесс с помощью pkill

Утилита pkill - это оболочка для kill, она ведет себя точно так же, и имеет тот же синтаксис, только в качестве идентификатора процесса ей нужно передать его имя. Утилита сканирует директорию proc и находит PID первого процесса с таким именем, затем отправляет ему SIGTERM. Таким образом, вы можете убить процесс по имени Linux. Например, если мы хотим завершить тот же ping:

Также можно вручную задать тип сигнала:

pkill -TERM ping

Вместо ps, вы можете использовать утилиту pgrep для поиска pid процесса, убедимся что наша программа завершена:

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

Как остановить процесс с помощью killall

killall работает аналогично двум предыдущим утилитам. Она тоже приминает имя процесса в качестве параметра и ищет его PID в директории /proc. Но эта утилита обнаружит все процессы, с таким именем и завершит их. Например:

Как видите, запущено несколько процессов, осталось остановить процесс Linux с помощью killall:

Команда завершит все запущенные утилиты ping, вы можете убедиться в этом еще раз выполнив pgrep:

Выводы

В этой статье мы рассмотрели как убить процесс Linux. Иногда эта задача может быть очень полезной, но важно понимать, что ее нужно выполнять правильно. Нельзя сказать, что передача SIGKILL вместо SIGTERM очень опасна, но так делать не стоит. Надеюсь, эта информация была полезна для вас.

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

    запустить процесс выполняться на переднем плане;

    остановить выполнение процесса;

    продолжить процесс в фоновом режиме.

Для выполнения программы введем ее имя в командной строке и запустим на выполнение. Для остановки выполнения программы необходимо нажать на клавиатуре следующую комбинацию клавиш - +. После этого можно увидеть на экране следующее:

/home/student# yes > /dev/null

Stopped yes >/dev/null

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

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

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

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

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

Для приостановления фонового процесса необходимо переместить процесс на передний план, а затем остановить.

Завершение работы процесса

Существует несколько вариантов завершения работы процесса.

Вариант первый. Если процесс интерактивный, как правило, в документации или прямо на экране написано, как корректно завершить программу.

Вариант второй. В том случае, если не указано как можно завершить текущий процесс (не фоновый), то можно воспользоваться клавиатурной комбинацией +. Возможно использовать также комбинацию клавиш +. А для остановки фонового процесса можно перевести его на передний план, а затем уже воспользоваться вышеприведенными клавиатурными комбинациями.

Вариант третий и самый действенный. В том случае, если не удалось прекратить выполнение процесса вышеприведенными способами – например, программа зависла или "слетел" терминал - для завершения процесса можно воспользоваться следующими командами: kill, killall.

Команда kill может получать в качестве аргумента как номер процесса, так и идентификационный номер (PID) процесса. Таким образом, команда:

/home/student# kill 123 эквивалентна команде:

/home/student# kill %1

Можно видеть, что не надо использовать "%", когда вы обращаетесь к работе по идентификационному номеру (PID) процесса.

С помощью команды killall можно прекратить выполнение нескольких процессов сразу, имеющих одно и то же имя. Например, команда killall mc прекратит работу всех программ mc, запущенных от имени данного пользователя.

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

Инструкция

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

Чтобы остановить процесс, надо знать его имя. Откройте командную строку: «Пуск – Все программы – Стандартные – Командная строка». Введите команду tasklist и нажмите Enter. Вы увидите список запущенных в системе процессов. Если вы не можете по названию процесса определить его принадлежность, воспользуйтесь программой Everest. С ее помощью вы получите всю информацию о вашем компьютере, включая данные о запущенных процессах и пути к исполняемым файлам.

Остановить процесс можно несколькими способами. Самый простой – через "Диспетчер задач" (Ctrl + Alt + Del). Выберите в списке процессов тот, который вы желаете остановить, и кликните его правой кнопкой мышки. В открывшемся контекстном меню выберите «Завершить процесс». Помните о том, что вы не сможете остановить критически важные системные процессы, операционная система вам этого не позволит.

Остановить процесс можно и из командной строки, для этого введите команду taskkill /pid 1234 /f и нажмите Enter. Вместо «1234» введите идентификатор процесса (PID), его посмотрите в последней колонке списка, выводимого командой tasklist. Параметр f в команде определяет принудительное завершение процесса. Для просмотра всех вариантов использования команды taskkill введите в командной строке taskkill /? и нажмите Enter.

Если вы хотите остановить запущенную службу, откройте: «Пуск – Панель управления – Администрирование – Службы». Найдите нужную службу и дважды кликните ее мышкой. В открывшемся окне нажмите кнопку «Стоп», служба будет остановлена. Далее вы можете отключить ее запуск, выбрав в меню «Тип запуска» вариант «Отключить».

После остановки службы вы можете ее перезапустить, нажав кнопку «Старт». Кнопка видна в том случае, если в меню «Тип запуска» выбраны варианты «Авто» или «Вручную». Если выбран вариант «Отключено», кнопка будет неактивна.

Для запуска процесса, не являющегося службой и, соответственно, не отображающегося в списке служб, отыщите и запустите его исполнимый файл. Путь к файлу посмотрите в программе Everest до остановки процесса. Вы можете запустить процесс и из командной строки – например, для запуска Блокнота наберите в командной строке notepad.exe и нажмите Enter. Для запуска установленных вами программ необходимо ввести полный путь к исполнимому файлу.

Нечасто, конечно, но иногда можно встретить ситуации, когда после закрытия программы в «Диспетчере задач» не завершается процесс, отвечающий за ее функционирование, или продолжают работать какие-то дополнительные (сопутствующие) службы приложения. При этом система в дополнение ко всему может сообщать, что пользователю для завершения определенного процесса не хватает прав (отказано в доступе). Почему так происходит и как остановить работу ненужных или зависающих программ, читайте в ниже представленном материале.

Не завершается процесс в «Диспетчере задач» (отказано в доступе). Почему?

Чтобы понять, какое именно решение по устранению возникшей проблемы использовать в каждом конкретном случае, для начала следует выяснить причины, вследствие которых они возникают. Почему же в «Диспетчере задач» не завершается процесс с указанием на отсутствие прав доступа?

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

Перезагрузка системы

Если не завершается процесс в «Диспетчере задач», что делать в первую очередь? Как правило, рядовые пользователи поступают достаточно просто. Если по каким-то причинам в «Диспетчере задач» Windows 10 не завершается процесс, они попросту перезагружают систему. Понятно, что полный рестарт и приводит к остановке всех служб. Но что если после перезагрузки процесс активируется снова? А ведь некоторые процессы, запускаемые вместе с системой, нельзя отследить даже в стандартном разделе автозагрузки.

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

Если не хотите постоянно перепрыгивать с одной записи на другую, администраторскую «учетку» можно и вовсе отключить, прописав в командной строке команду «net user Администратор active:no» (без кавычек). После этого все программы будут стартовать только с правами администратора (для некоторых приложений не будут выдаваться даже предупреждения безопасности службы контроля учетных записей UAC, которые многих пользователей несказанно раздражают).

Завершение активных процессов через командную строку

Но приведенные выше действия положительный эффект могут дать не всегда. Что же делать, если в «Диспетчере задач» не завершается процесс, который, скажем, перегружает центральный процессор или использует оперативную память слишком усердно? В такой ситуации оптимальным инструментом из тех, которые имеются в Windows-системах, станет командная консоль (cmd).

Ее необходимо запустить от имени админа (если учетная запись суперпользователя не отключена), а затем воспользоваться командой taskkill (всю информацию о дополнительных атрибутах можно просмотреть посредством ввода строки «taskkill /?».

Из всего списка нас более всего интересуют атрибуты «/F» и «/IM», которые дописываются после основной команды. Как это выглядит? Предположим, у нас в «Диспетчере задач» не завершается процесс «Гугл Хром». Команда принудительной остановки приложения будет выглядеть так: «taskkill /F /IM Chrome.exe» (опять же, без кавычек). Как уже понятно, такое решение приемлемо для исполняемых файлов программ. Если воспользоваться дополнительным ключом «/T», при вводе основной команды завершения работы выбранного приложения автоматически будут завершены и все дочерние процессы.

Остановка процессов с указанием идентификаторов

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

Его можно просмотреть в самом «Диспетчере задач», дополнительно активировав отображение столбца с ИД процесса. Основная же команда в этом случае примет такой вид: «taskkill /F PID 0000», где 0000 - определенный в «Диспетчере задач» идентификатор процесса.

В принципе, проблему, связанную с тем, что в «Диспетчере задач» не завершается процесс какой-то программы, можно решить, следуя советам специалистов Microsoft, которые опубликованы на странице поддержки. Суть состоит в том, чтобы загрузить с сайта специальный архив, содержащий набор инструментов PSTools, затем распаковать его на жесткий диск и переместить файл PsExec.exe или объект PsExec64.exe, в зависимости от архитектуры системы, в корень системного раздела (диска «С»), а затем через командную консоль выполнить команду «c:\psexec -i -d -s taskmgr.exe» (без кавычек). После этого в «Диспетчере задач» нужно будет выполнить все необходимые действия, связанные с остановкой определенных процессов, затем закрыть «Диспетчер» и удалить исходный файл PsExec из системного раздела.

Примечание: использовать этот метод даже на сайте корпорации рекомендуется только на свой страх и риск.

Использование утилиты Process Explorer

Куда проще воспользоваться небольшим приложением которое является альтернативой «Диспетчера задач», но с расширенными возможностями. Преимущество этой программы состоит в том, что устанавливать ее на жесткий диск не нужно, поскольку приложение изначально является портативным и запускается из одного исполняемого файла. После старта программы в ней достаточно выбрать искомый незавершаемый процесс или даже целое дерево процессов с дочерними апплетами, выбрав из меню ПКМ команды Kill Process или Kill Process Tree.

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

Разблокирование доступа к файлам процесса

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

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

Проблемы вирусного воздействия

Вирусы, к сожалению, ограничивать доступ к остановке процессов и служб тоже могут. И далеко не всегда это связано напрямую с самими вирусными апплетами. Если такая ситуация наблюдается, для начала рекомендуется проверить систему каким-нибудь портативным антивирусом, а при невозможности нейтрализации угроз обратиться к программе Kaspersky Rescue Disk, при помощи которой можно загрузиться еще до старта системы со съемного носителя, а затем выполнить глубокое сканирование, которое включает в себя даже оперативную память.

Краткий итог

Вот, собственно, и все, что касается принудительного завершения процессов в «Диспетчере задач». Что касается наилучшего инструмента, самым простым выглядит альтернативный менеджер Process Explorer. Если же под рукой такой программы нет, подойдет и командная строка. Единственное условие для выполнения всех вышеописанных команд - старт самой консоли с правами администратора.

Если Ваш компьютер заражен, и Вы принимаете решение удалить вирус самостоятельно, то Вам понадобится остановить вредоносные процессы. Если Вы не являетесь компьютерным гением, мы не рекомендуем удалять вирусы вручную, поскольку в таком случае Вы легко можете навредить своей ПК системе. Вам следует воспользоваться надежными антивирусными программами, такими как или , с помощью которых Вы легко сможете удалить вирусы автоматически. Однако, что же делать в ситуации, когда находящийся в компьютере вирус не позволяет Вам установить антивирусную программу в систему или же блокирует антивирусное ПО, когда Вы пытаетесь запустить его для удаления киберинфекции? Опять же Вам нужно остановить вредоносный процесс. Каким образом Вы можете это сделать? Рассмотрим имеющиеся в Вашем распоряжении варианты:

Остановите вредоносный процесс с помощью диспетчера задач:

  • Чтобы открыть Диспетчер задач, Вы должны одновременно нажать комбинацию клавиш ctrl+shift+esc или ctrl+alt+del .
  • Как только появится Диспетчер задач, выберите закладку Процессы и отыщите вредоносные процессы в списке.
  • Щелкните их правым щелчком мыши и выберите Завершить . Вредоносный процесс легче будет отыскать в списке сразу после запуска Windows.

Если вирус ведет себя агрессивно и оставляет Диспетчер задач неактивным, зайдите в Пуск -> Выполнить и введите ‘taskmgr ‘ без кавычек или проследуйте по адресу C:\Windows\System32 , скопируйте taskmgr и переименуйте его другим именем, например, iexplorer.exe. Теперь запустите диспетчер и выполните указанные выше действия.

Если Вы правильно определили и обезвредили вредоносный процесс, Вы должны заметить исчезновение надоедливых предупреждений и подобных симптомов присутствия вируса. Однако имейте в виду, что описанная выше процедура не УДАЛЯЕТ вирус полностью. Чтобы сделать это, Вам следует продолжить удаление вредоносного ПО путем сканирования системы надежной антишпионской программы.

Остановите вредоносный процесс при помощи безопасного режима:

Для остановки вредоносных процессов, Вы также можете воспользоваться Безопасным режимом с загрузкой сетевых драйверов. Для входа в этот режим, выполните следующие действия:

  • Перезагрузите компьютер и, как только ПК начнет загружаться, многократно нажимайте F8 .
  • Затем выберите Безопасный режим или Безопасный режим с загрузкой сетевых драйверов .
  • Теперь Вы должны заметить, что вирус со всеми его симптомами исчез. Это означает, что Вы успешно завершили вредоносный процесс.

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

Устраните вредоносный процесс с помощью команды Taskkill:

Если на Вашем зараженном компьютере установлена операционная система Windows, Вы можете попытаться воспользоваться командой Taskkill и её опцией /IM, которая позволяет устранять процессы по их идентификаторам или по именам их образов. Данное средство очень эффективно, если Вы пытаетесь удалить ненужное приложение. Однако Вам следует знать, что это командное средство доступно только в том случае, если Вы точно знаете имена вредоносных процессов.

  • Чтобы открыть taskkill, щелкните Пуск → Выполнить .
  • Теперь введите taskkill/f/im [имя вредоносного процесса].
  • Нажмите Enter .

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

Остановите вредоносные процессы с помощью Process Explorer:

Process Explorer не только позволяет пользователям устранить вредоносные процессы. Он также показывает информацию об активных процессах и об их расположении. Чтобы воспользоваться им для блокирования вредоносных процессов, выполните следующие действия:

  • Скачайте Process Explorer путём ввода в адресную строку броузере ссылки:http://download.sysinternals.com/Files/ProcessExplorer.zip .
  • Запустите Process Explorer (procexp.exe), а затем отыщите вредоносные процессы.
  • Выберите их мышью и нажмите DEL для их удаления.

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