По хорошему процесс следует завершать сигналом 2(SIGINT) или 15(SIGTERM) и если уж не помогает тогда 9(SIGKILL).
Сигнал 2 посылается программе связанной с терминалом при нажатии Ctrl+C, есть ещё запасная комбинация Ctrl+, посылающая сигнал 3(SIGQUIT), который, если не перехватывается, делает дамп памяти процесса (чтобы потом посмотреть в отладчике).
Сигнал 15 посылается процессам при завершении работы системы или смены runlevel и по-умолчанию если не указан другой в командах kill и killall, по нему программа может быстренько сохранить важные данные и удалить временные файлы, если настроит перехват. Так же перехват сигнала 2 используется для завершающих действий перед выходом.
Сигнал 9 нельзя перехватить, поэтому его следует использовать в крайних случаях, когда программа зависла и не реагирует на обычные сигналы.
Источник: ru.stackoverflow.com
Отключение пароля в терминале для sudo
Как остановить процесс Linux
Многим современным пользователям известно, что операционная система Linux работает существенно стабильнее, чем ОС Windows. Она быстрее загружает различные программы и сервисы. Случаются ситуации, когда необходимо в срочном порядке завершить определенный процесс.
Такая задача может потребоваться в том случае, если программа зависла после запуска системного сервиса в фоновом режиме с помощью терминала, а не системы инициализации. На самом деле ситуаций может быть множество. Убить определенный процесс в ОС «Линукс» значительно проще, чем перезагрузить всю систему, установленную на персональном компьютере.
Сигналы как часть завершения процесса

Управлять процессами в ОС Linux можно с помощью специальных сигналов. Одновременно с этим, пользователь по мере необходимости завершает ненужный процесс. Сигналы могут передаваться как со стороны самой системы, так и со стороны пользователя. Во втором случае потребуется введение специальной команды или использование определенного сочетания клавиш в терминале. Если процессу пришел сигнал о необходимости его завершения, потребуется организовать определенные подготовительные действия. Изначально завершаются дочерние процессы, удаляются временные файлы и сокеты. Стоит отметить, что процессы в ОС «Линукс» могут реагировать не на все сигналы. Рекомендуется рассмотреть максимально подробно те, которые применяются при завершении процессов:
- SIGINT. Этот сигнал является самым безобидным. Он будет отправлен процессу, который запущен из терминала путем сочетания клавиш «Ctrl+C». Процесс будет завершен правильно, а управление возвращается к пользователю.
- SIGQUIT. Такой сигнал также отправляется путём сочетания клавиш, но распространяется на программу, запущенную в самом терминале. Сигнал сообщит ей, что необходимо срочное завершение. В данном случае программа корректно завершится или просто проигнорирует сигнал. Главное отличие от вышеописанного варианта – процесс сопровождается генерированием дампа памяти. Здесь используется сочетание клавиш «Ctrl+/».
- SIGHUP. Данный сигнал сообщит определенному процессу, что соединение с терминалом управления прервано. Он отправляется не пользователем, а самой системой. Сигнал может возникнуть при закрытии доступа к интернету.
- SIGTERM. Этот сигнал свидетельствует о немедленном завершении процессов, но обрабатывается с помощью специальных программ. Именно поэтому появляется возможность устранения всех дочерних процессов, освобождения ресурсов.
- SIGKILL. Такой сигнал также немедленно завершает процессы. Главное отличие от предыдущего варианта – сигнал передаётся не на сам процесс, а на ядро, где в последующем обрабатывается. В этом случае ресурсы и дочерние процессы не завершаются в принудительном порядке.
Пользователь должен быть осведомлён, что все процессы обязаны завершаться максимально корректно. При выполнении такой процедуры закрываются и удаляются временные файлы, освобождаются порты и сокеты.
Linux для начинающих | Терминал Linux | Основные команды
Синтаксис
Чтобы передать предварительно выбранный сигнал определенному процессу в Linux, рекомендуется воспользоваться специальной утилитой kill. Она имеет весьма простой синтаксис:
Здесь можно использовать любой сигнал, который представлен в вышеописанном списке. Если данный параметр не задать в команде, «по умолчанию» будет использован SIGTERM. Именно он практически моментально завершит выбранную вами программу.
Стоит отметить, что перед запуском команды требуется определиться с процессом, который нужно завершить. Перед ним указывается уникальный идентификатор «pid».
К примеру, в операционной системе подключенный по ssh пользователь «ya». Нам необходимо завершить этот процесс, тем самым закрыть подключение по ssh с использованием утилиты kill. Первоначально требуется определить ее идентификатор с помощью команды «ps».
ps aux | grep ssh
На экране вашего монитора появится окно, где в первом столбце прописано имя пользователя, во втором тот самый pid, который нужен для завершения процесса.

Как видно на скриншоте, pid который нам нужен 2590. Завершим подключение пользователя «ya» с помощью сигнала SIGTERM.

Бывают различные ситуации. В некоторых случаях после введения вышеописанной программы процесс продолжает висеть в ОС «Линукс». Проверить его наличие можно также с помощью утилиты «ps» (процесс ее запуска описан выше). В данном случае можно воспользоваться более действенным сигналом SIGKILL, где запрос идет непосредственно через ядро всей системы. Необходимо ввести – kill -KILL 20445.
После ведения такой команды рекомендуется снова запустить утилиту «ps». Если вы обнаружите, что процесс запущен от имени пользователя, которого завершали прцесс ( в нашем случае это ya), потребуется дополнительное использование утилиты «sudo».
Особенности завершения процесса с использованием команды «pkill»
Главная отличительная особенность данной утилиты – вместо идентификатора процесса требуется ввести имя программы. Синтаксис и поведение будет аналогичным.
Утилита «pkill» отсканирует директорию и самостоятельно найдет ID с аналогичным именем. Только после этого будет подан сигнал SIGTERM. Например, закроем программу mc.
Особенности завершения процесса с использованием команды «killall»
Такая утилита будет работать аналогично двум вышеописанным вариантам. Она также может понимать имя процесса, своевременно найдет его в директории.
Главная отличительная особенность – будут обнаружены и завершены все процессы, которые имеют такое имя.
При использовании утилит важно понимать, что к постановке задач требуется отнестись максимально ответственно. Если сделать что-то не правильно, могут возникнуть сбои в работе ОС «Линукс».
Источник: www.vseprolinux.ru
Команда kill в linux
Как завершить процесс в Linux. Команды kill, pkill,killall
В операционных системах Linux есть команда Kill, прерывающая процесс. Она позволяет серверу продолжать работу после серьезных изменений и обновлений без необходимости перезагрузки. Это одно из важнейших преимуществ Linux и одна из причин того, почему она установлена на 90% серверов в мире. Команда kill отправляет процессу специальный сигнал. Ее можно запустить различными способами, непосредственно из командной строки или из скрипта.
Синтаксис
Использование команды kill из /usr/bin предоставляет дополнительную возможность прервать процесс по его имени при помощи pkill. Стандартный синтаксис команды kill следующий: Для команды kill существует около 60 сигналов, но основные значения следующие:
| Имя сигнала | Номер сигнала | Действие |
| SIGHUP | 1 | Отключить |
| SIGKILL | 9 | “Убить” |
| SIGTERM | 15 | Прервать |
SIGTERM используется по умолчанию. Это самый безопасный способ прерывания процесса, когда приложению отправляется запрос, который может быть обработан или проигнорирован. SIGHUP — менее безопасный способ. SIGKILL — наименее безопасный вариант, прерывание процесса без сохранения, этот сигнал не может быть проигнорирован или перехвачен.
Идентификаторы процессов
Чтобы прервать (“убить”) процесс, нам нужно знать его идентификатор (Process ID или PID). Он генерируется автоматически при запуске каждой программы и есть у каждого процесса в Linux. Первый процесс, запускаемый при загрузке Linux — init, поэтому в большинстве случаев ему присваивается идентификатор ‘1’. Init — системный процесс, его нельзя прервать таким образом.
При получении сигнала он сам решает, позволить ли себя прервать, таким образом, команда kill становится просто запросом на отключение системы. Это сделано для того, чтобы исключить случайное прерывание системных процессов.

Увидеть все запущенные процессы и соответствующие им идентификаторы можно при помощи следующей команды: Для получения идентификатора конкретного процесса можно воспользоваться командой pidof, которой в качестве аргумента задается его имя. Также можно сделать фильтрацию с помощью grep
Примеры
- Пользователь может прервать любой свой процесс.
- Пользователь не может прервать процесс другого пользователя..
- Суперпользователь (root) может прервать системный процесс и процесс любого пользователя.
- Пользователь не может прервать системный процесс
Чтобы “убить” процесс с указанным PID, нужно выполнить следующую команду (приведен пример для процесса mysqld из предыдущего раздела):
Будет “убит” процесс с PID=1684, то есть mysqld.
Можно использовать не только номер, но и название сигнала/ Например, для запроса на прерывание, который можно обработать или проигнорировать:
Аналогично, команда kill -SIGKILL PID эквивалентна команде # kill -9 PID
Для прерывания нескольких процессов можно указать их идентификаторы через пробел:
Прерывание процесса по имени. Команда pkill
Для прерывания процесса по имени, а не идентификатору, используется команда pkill. Нужно внимательно вводить имя процесса, так как прерывание не того процесса может привести к сбоям:
Если у процесса слишком много экземпляров и дочерних процессов, существует команда killall, которой в качестве аргумента также задается имя процесса.
Для прерывания всех экземпляров mysqld с дочерними процессами воспользуйтесь следующей командой:
Далее можно проверить состояние процесса (запущен он или нет), например:
Команда killall
Еще одна полезная команда для завершения процессов, это команда killall. Эта команда также как и pkill может завершить все процессы имеющие одно имя
А также весьма полезна бывает когда нужно завершить все процессы какого нибудь пользователя.