Killall linux команда не найдена

Обновлено: 07.07.2024

Под процессом мы будем понимать запущенную в системе копию программы. Например, если вы открыли три окна калькулятора (например, gcalctool), это значит, что вы запустили три процесса.

Находим PID зависшего процесса

Каждый процесс в Linux имеет свой идентификатор, называемый PID. Перед тем, как выполнить остановку процесса, нужно определить его PID. Для этого воспользуемся командами ps и grep. Команда ps предназначена для вывода списка активных процессов в системе и информации о них. Команда grep запускается одновременно с ps (в канале) и будет выполнять поиск по результатам команды ps. Вывести список всех процессов можно, выполнив в командной строке:

Но, как правило, список очень большой и найти процесс, который мы хотим «убить», бывает не так просто. Здесь на помощь приходит команда grep. Например, чтобы найти информацию о процессе с именем gcalctool выполните команду:

Команда grep выполнит поиск по результатам команды ps и на экран будут выведены только те строки, которые содержат строку (слово) gcalctool. Здесь есть одна интересная деталь, например, если у вас не запущено приложение gcalctool, то после выполнения ps axu | grep gcalctool вы получите:

То есть мы получили сам процесс grep, так как в качестве параметра команде мы указали слово gcalctool, и grep нашел сам себя в выводе команды ps.

Если процесс gcalctool запущен, то мы получим:

Здесь нас интересует строка: «yuriy 25609 7.6 0.4 500840 17964 ? Sl 10:20 0:00 gcalctool». Число 25609 и есть идентификатор (PID) процесса gcalctool.

Есть еще один более простой способ узнать PID процесса — это команда pidof, которая принимает в качестве параметра название процесса и выводит его PID. Пример выполнения команды pidof:

«Убиваем» процесс командой kill

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

Вообще команда kill предназначена для посылки сигнала процессу. По умолчанию, если мы не указываем какой сигнал посылать, посылается сигнал SIGTERM (от слова termination — завершение). SIGTERM указывает процессу на то, что необходимо завершиться. Каждый сигнал имеет свой номер. SIGTERM имеет номер 15. Список всех сигналов (и их номеров), которые может послать команда kill, можно вывести, выполнив kill -l. Чтобы послать сигнал SIGKILL (он имеет номер 9) процессу 25609, выполните в командой строке:

Сигнал SIGTERM может и не остановить процесс (например, при перехвате или блокировке сигнала), SIGKILL же выполняет уничтожение процесса всегда, так как его нельзя перехватить или проигнорировать.

Убиваем процессы командой killall

Команда killall в Linux предназначена для «убийства» всех процессов, имеющих одно и то же имя. Это удобно, так как нам не нужно знать PID процесса. Например, мы хотим закрыть все процессы с именем gcalctool. Выполните в терминале:

Команда killall, также как и kill, по умолчанию шлет сигнал SIGTERM. Чтобы послать другой сигнал нужно воспользоваться опцией -s. Например:

Заключение

Некоторые процессы не удается остановить под обычным пользователем. Например, если процесс был запущен от имени пользователя root или от имени другого пользователя системы, то команды kill и killall нужно выполнять от имени суперпользователя, добавляя sudo (в Ubuntu):

Бывают ситуации, когда вы работаете в графическом интерфейсе (например, GNOME) и вам не удается открыть эмулятор терминала, чтобы остановить зависший процесс. Тогда можно переключиться на виртуальную консоль клавишами Ctrl+Alt+F1, залогиниться в ней и выполнять команды уже из нее. А потом перейти обратно, нажав Ctrl+Alt+F7.

Здравствуйте. Я только что установил Debian на ноутбук. Всё хорошо, но.

Я не могу выключить ПК из консоли.

Иногда графика виснет. Я научился переходить в консоль и убивать процессы. Это Debian тоже не умеет, что за фигня?

Что я делаю не так?

Тебе нужно PATH задать.

Или вместо su используй su -

Flotsky ( 23.06.20 13:25:58 )
Последнее исправление: Flotsky 23.06.20 13:29:49 (всего исправлений: 1)

killall в составе psmisc

reboot и прочее в systemd-sysv или в sysvinit , если древний дебиан.

Проверяй, установлены или нет.

И про путь /sbin/reboot уже написали, тоже надо проверить. Как и /usr/bin/killall .

vvn_black ★★★★★ ( 23.06.20 13:31:34 )
Последнее исправление: vvn_black 23.06.20 13:34:22 (всего исправлений: 2)


reboot и прочее в systemd-sysv или в sysvinit, если древний дебиан.

Debian 10 Buster

Всё на месте. Ковыряйся с правами и с PATH.

vvn_black ★★★★★ ( 23.06.20 13:46:31 )
Последнее исправление: vvn_black 23.06.20 13:56:03 (всего исправлений: 2)


Точно также и с sudo. 99,99% его всё равно сами поставят.

Artamudo ★★★ ( 23.06.20 13:58:23 )
Последнее исправление: Artamudo 23.06.20 14:00:37 (всего исправлений: 1)


А в какие группы добавлен пользователь?


Debian – это конструктор, а не готовый для использования дистрибутив Linux’а.

При установке Debian’а нужно иметь опыт администрирования Linux-дистрибутивов.

Возможно вам нужно попробовать какой-нибудь уже готовый DEB-based или RPM-based дистрибутив: Ubuntu, Mint, Fedora и пр.

whereis reboot systemctl reboot

ИМХО, самый правильный совет. Добавлю, переходи на Gentoo.

Vault_Boy ★ ( 23.06.20 20:02:32 )
Последнее исправление: Vault_Boy 23.06.20 20:03:04 (всего исправлений: 1)

Gentoo на ноутбуке с 512 мегабайтами RAM (было сказано в другом треде) и, небось, процессоре 15-летней давности (это моя догадка) – отличная вещь!

Именно! Прирост в 3 раза. Проверено. Будет видно отзывчивость GUI конкретно в 2 раза.

Vault_Boy ★ ( 23.06.20 21:35:09 )
Последнее исправление: Vault_Boy 23.06.20 21:36:34 (всего исправлений: 2)

Поставь пакет command-not-found и он будет тебе объяснять, что не так с командой или какой пакет поставить.

Не скромничайте - в 30 раз!

Ну и при установке Gentoo точно не надо иметь опыт администрирования Linux-систем! Более того, Gentoo известна как раз простотой её установки!

Rootlexx ★★ ( 23.06.20 23:15:23 )
Последнее исправление: Rootlexx 23.06.20 23:16:19 (всего исправлений: 1)


Точно также и с sudo. 99,99% его всё равно сами поставят.

На десктопе — возможно, в остальных местах (а Debian — это далеко не только десктопы) — вряд ли.

sudo — это не тот инструмент, который должен стоять на каждой системе.


То есть su -c '%command%' можно, а sudo нельзя?


То есть su -c '%command%' можно, а sudo нельзя?

И su -c '%command%' нельзя:


Хмм. У меня работает. Это же wheel нужен наверное.


“only root” как бы намекает, не “only users in wheel” же. ☺


Не знаю на каком ты дистрибутиве, наверное на фряхе, но у меня на федоре и манжаре работало точно на пустых юзерах.


на каком ты дистрибутиве, наверное на фряхе

FreeBSD — не дистрибутив, а ОС. ☺


Debian – это конструктор, а не готовый для использования дистрибутив Linux’а.

Это такое 4.2, что должно удаляться с -15

А в какие группы добавлен пользователь?

AVRS ★★ ( 24.06.20 00:25:30 )
Последнее исправление: AVRS 24.06.20 00:28:00 (всего исправлений: 2)

Все нормально с Дебианом. ТС решил, что он самый умный и не установил базовые системные утилиты (или как их там).


Сразу, не читая комментарии. Не знаю почему не установлен killall или что за проблемы с $PATCH. Но: в случае системд питанием надо управлять через него, systemctl poweroff/reboot. Это должно работать от пользователя. halt, reboot - команды рута.

Я устанавливал с помощью официального системного NETINSTALL. И там все должно быть. Я в процесс не вмешивался.

Я же сказал, что на Debian 10 Buster.

🤷🏽‍♂️ ну не знаю. У меня на дебиане и su -c, и sudo работают из коробки.

Генту, генту. Не люблю я эту возню с портажем, емержем, че там ещё? Давно генту не юзал.

На ноутбуке с 2мя гигами озу тормозил. Арч тоже. Дебиан летает.


А при чём здесь ты?


99,99% его всё равно сами поставят.

Ни разу не ставил.


Поздравляю. Ты в 0,01%.

Чем же ты тогда пользуешься?


su, а дальше из-под рута. Уж лет 15 как.

Zhbert ★★★★★ ( 24.06.20 10:20:52 )
Последнее исправление: Zhbert 24.06.20 10:21:21 (всего исправлений: 1)


А другим пользователям тоже пароль рута выдаёшь?


А другим пользователям тоже пароль рута выдаёшь?

Моими железками пользуюсь только я.

что за глупость. На любом дистрибутиве можно отстрелить себе ногу парой-тройкой телодвижений.

Это была попытка легкого сарказма. Мне представляется, что на таком железе сборка из исходников не слишком удобной. А по теме был самый первый ответ: в Debian 10 PATH после su не устанавливается, после su - устанавливается. И еще для всяких перезагрузок и выключения сейчас используется systemctl reboot , systemctl poweroff (тоже уже было).

Это железо у тебя из спортивного интереса или настолько тяжелая экономическая ситуация?

а после установки создавал нового пользователя? Или это изначальный пользователь?

Несмотря на то что 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 очень опасна, но так делать не стоит. Надеюсь, эта информация была полезна для вас.

Может ли кто-нибудь объяснить мне разницу между kill и killall ? Почему не killall видит, что ps показывает?

Система соответствует требованиям 11,3 (64 бита); ядро 2.6.34-12; procps версия 3.2.8; killall от PSmisc 22,7; убить из GNU coreutils 7.1

Никогда не убивайте процессы с помощью SIGKILL (-9). Что делать тогда, когда процесс должен быть остановлен?

Есть на самом деле несколько тонко разные варианты названия команды, которые используются ps , killall и т.д.

Два основных варианта: 1) длинное имя команды, которое вы получаете при запуске ps u ; и 2) короткое имя команды, которое вы получаете, когда запускаете ps без каких-либо флагов.

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

Вот действительно тривиальный скрипт, который демонстрирует разницу. Я назвал это mycat :

После запуска, вот два разных типа ps .

Обратите внимание, как начинается вторая версия /bin/sh ?

Теперь, насколько я могу судить, на killall самом деле читает /proc/<pid>/stat и берет второе слово между скобками в качестве имени команды, так что это действительно то, что вам нужно указать при запуске killall . Логично, что это должно быть то же, что и ps без u флага, но было бы неплохо проверить.

Вещи, чтобы проверить:

  1. что cat /proc/<pid>/stat говорит имя команды?
  2. что ps -e | grep db2 говорит имя команды?
  3. сделать ps -e | grep db2 и ps au | grep db2 показать одно и то же имя команды?

Примечания

Если вы используете и другие флаги ps, вам может быть проще использовать его ps -o comm для просмотра короткого имени и ps -o cmd длинного имени.

Вы также можете найти pkill лучшую альтернативу. В частности, pkill -f пытается сопоставить, используя полное имя команды, то есть имя команды, напечатанное с помощью ps u или ps -o cmd .

Favorite

Добавить в избранное

Главное меню » Linux » Причины, по которым Kill не работает в Linux, как это решить?

Причины, по которым Kill не работает в Linux, как это решить?

Как упоминалось ранее, когда программа перестает отвечать и вы не можете ее перезапустить, вам нужно новое решение. В этот момент пользователи Windows откроют свой диспетчер задач, чтобы избавиться от зависшего процесса. В Linux нет встроенного диспетчера задач, но есть команда, которую мы можем использовать для достижения того же эффекта, что и функция «Завершить задачу» в Windows. Эта команда известна как команда Kill, и мы можем использовать ее по-разному, чтобы помочь нам и системе избавиться от поврежденных экземпляров.

Синтаксис Kill

Синтаксис команды Kill прост.

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

Параметр сигнала

Как видите, всего доступно 64 варианта.

Хотя существует более 60 различных сигналов, ниже описаны два из наиболее распространенных.

  1. SIGKILL (9): Как следует из названия, эта команда полностью завершает процесс без сохранения данных программы. Эта команда используется только в крайнем случае.
  2. SIGTERM (15): генерирует сигнал завершения, который закрывает программу безопасным способом. Это также сигнал по умолчанию.

Сигналы могут быть дополнительно определены 3 различными способами, описанными ниже.

1. Мы можем указать сигнал соответствующей цифрой:

2. Мы можем указать сигнал по его имени:

3. Мы можем указать сигнал без SIG в названии.

Все эти команды выполняют одну и ту же задачу.

Параметр PID

Сначала откройте командный терминал для Ubuntu. После этого выполните следующую команду:

Как вы теперь знаете, PID Thunderbird Mail запускает следующую команду, чтобы завершить процесс.

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

Более того, пользователи могут завершить процесс, используя команды kill и pidof/pgrep в одной строке. Синтаксис такой договоренности:

Причины, по которым Kill может не работать

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

Чтобы избавиться от этой проблемы, вы можете использовать сигнал SIGKILL для полного завершения процесса. Сигнал SIGKILL позволяет системе взять дело в свои руки. Так что, если вы встретите такую ​​неприятную ситуацию, вы всегда можете выйти из нее с помощью сигнала SIGKILL или -9.

Читать Лучшие внешние жесткие диски, совместимые с Linux

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

Команда Killall

Команда Kill встроена в Linux и другие операционные системы на базе Unix, но команда Killall предназначена только для пользователей Linux. Эта команда позволяет пользователю завершить процесс, используя имя процесса. Нет необходимости находить PID процесса. Синтаксис команды Killall:

Эта команда может служить хорошей альтернативой, если по какой-то причине Kill не работает у вас даже после предписанных решений.

Вывод

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: