Командная строка Linux предоставляет множество команд для уничтожения процесса. Например, вы можетеkill
команда передать PID, чтобы убить процесс;pkill
В качестве входных данных команда принимает регулярное выражение, поэтому процессы, соответствующие шаблону, уничтожаются.
Но есть еще одна команда, называемаяkillall
, по умолчанию он точно соответствует имени параметра, а затем уничтожает соответствующий процесс. В этой статье мы обсудим практическое применение этой команды.
По умолчанию команда killall отправляет процессу /groupSIGTERM
Однако сигналы также могут отправлять указанный сигнал через параметр.
Ниже мы подробно рассмотрим 8 основных способов использования killall на примерах.
1. Основное использование
Если у нас запущено 3 процесса, ониhello1, hello2, hello3
Теперь мы хотим убить процесс Hello1, вы можете использовать его напрямую следующим образом:
killall hello1
Результат запуска следующий:
[alvin@VM_0_16_centos test]$ ps aux | grep hello
alvin 12061 0.0 0.0 4152 344 pts/0 S 14:41 0:00 ./hello1
alvin 12074 0.0 0.0 4152 344 pts/0 S 14:41 0:00 ./hello2
alvin 12084 0.0 0.0 4152 340 pts/0 S 14:41 0:00 ./hello3
alvin 12089 0.0 0.0 112648 964 pts/0 R+ 14:41 0:00 grep --color=auto hello
[alvin@VM_0_16_centos test]$ killall hello1
[1] Terminated ./hello1
[alvin@VM_0_16_centos test]$ ps aux | grep hello
alvin 12074 0.0 0.0 4152 344 pts/0 S 14:41 0:00 ./hello2
alvin 12084 0.0 0.0 4152 340 pts/0 S 14:41 0:00 ./hello3
alvin 12170 0.0 0.0 112648 964 pts/0 R+ 14:42 0:00 grep --color=auto hello
Как видите, процесс hello1 был убит.
Остальные процессы hello2 и hello3, мы хотим убить их все сразу, то есть убивать процессы пачками, мы можем сделать следующее:
[alvin@VM_0_16_centos test]$ killall hello*
hello: no process found
hello1: no process found
hello.c: no process found
[2]- Terminated ./hello2
[3]+ Terminated ./hello3
Таким образом, все процессы, начинающиеся с приветствия, уничтожаются.
2. Завершить процесс, запущенный пользователем
Мы можем убить набор процессов, которые удовлетворяют определенному регулярному выражению, и аналогичным образом мы можем убить все процессы, запущенные определенным пользователем.
Например, пользователь Harry теперь работает несколько процессов следующим образом:
[alvin@VM_0_16_centos test]$ ps aux | grep harry
root 13675 0.0 0.2 148236 5584 ? Ss 14:55 0:00 sshd: harry [priv]
harry 13677 0.0 0.1 148236 2944 ? S 14:55 0:00 sshd: harry@pts/1
root 13678 0.0 0.2 148236 5444 ? Ss 14:55 0:00 sshd: harry [priv]
harry 13680 0.0 0.1 148236 2252 ? S 14:55 0:00 sshd: harry@notty
harry 13681 0.0 0.1 53228 2168 ? Ss 14:55 0:00 /usr/libexec/openssh/sftp-server
harry 13694 0.0 0.1 116436 3252 pts/1 Ss+ 14:55 0:00 -bash
harry 13948 0.0 0.0 4152 344 pts/1 S 14:57 0:00 ./hello1
harry 13952 0.0 0.0 4152 344 pts/1 S 14:57 0:00 ./hello2
harry 13959 0.0 0.0 4152 344 pts/1 S 14:57 0:00 ./hello3
alvin 14005 0.0 0.0 112648 964 pts/0 R+ 14:58 0:00 grep --color=auto harry
Теперь мы хотим убить все процессы, запущенные в Harry, и можем действовать следующим образом:
killall -u harry
Результаты приведены ниже:
[alvin@VM_0_16_centos test]$ sudo killall -u harry
[alvin@VM_0_16_centos test]$ ps aux | grep harry
alvin 14040 0.0 0.0 112648 964 pts/0 R+ 14:58 0:00 grep --color=auto harry
Однако эту опцию следует использовать с осторожностью, поскольку она уничтожит все процессы пользователя, включая процессы терминала, и приведет к выходу пользователя напрямую. Так что не пытайтесь легкомысленно использовать этот вариант, если не хотите проиграть.
3. Завершить процесс в конце времени
Если у нас сейчас запущено много программ, и мы просто хотим убить процессы, которые работают более 5 часов, то мы можем использовать-o
варианты, где o означает старше, следующим образом:
killall -o 5h
Точно так же, если вы хотите убить процесс, который занимает менее 4 часов, вы можете использовать-y
варианты, где y означает более молодой, следующим образом:
killall -y 4h
Эти два варианта также очень грубы и также будут выходить из терминала, поэтому я не буду их демонстрировать.
4. Игнорировать регистр
По умолчанию команда killall чувствительна к регистру, поэтому мы не сможем правильно завершить процесс, если неправильно напишем регистр.
[alvin@VM_0_16_centos test]$ killall HELLO1
TEST1: no process found
Если мы хотим игнорировать регистр, мы можем добавить-I
(заглавная i) вариант.
[alvin@VM_0_16_centos test]$ killall -I HELLO1
[1] Terminated ./hello1
5. Закройте команду echo
По умолчанию killall сообщит вам о выполнении команды, но что, если нас не волнует результат ее выполнения, и мы просто хотим, чтобы она выполнялась молча? просто добавь-q
вариант, где q представляет вполне, следующим образом:
[alvin@VM_0_16_centos test]$ killall HELLO2
HELLO2: no process found
[alvin@VM_0_16_centos test]$ killall -q HELLO2
[alvin@VM_0_16_centos test]$
6. Перечислите все поддерживаемые сигналы
Как упоминалось ранее, команда killall по умолчанию отправляет сигнал SIGTERM, поэтому может ли Энн отправлять другие сигналы? Конечно, это возможно. можно использовать-l
опция для просмотра всех сигналов, поддерживаемых killall:
[alvin@VM_0_16_centos test]$ killall -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
вы можете использовать-s
опция (за которой следует имя сигнала) для отправки специального сигнала процессу.
7. Интерактивная работа
Если вам неудобно убивать несколько процессов и вы беспокоитесь об уничтожении процессов, которые не следует убивать, вы можете использовать-i
варианты, так что вы можете свободно решать, какие процессы следует убить, а какие оставить.
[alvin@VM_0_16_centos test]$ killall -i hello*
Kill hello2(13825) ? (y/N) y
Kill hello3(13831) ? (y/N) N
hello: no process found
hello1: no process found
hello3: no process found
hello.c: no process found
[2]- Terminated ./hello2
8. Дождитесь завершения процесса
Когда сигнал отправляется процессу, если вы хотите быть уверены, что процесс был убит, прежде чем вернуть результат выполнения, вы можете использовать-w
options, где w означает ожидание, следующим образом:
[alvin@VM_0_16_centos test]$ killall -w hello1
[4]+ Terminated ./hello1
Похоже, что здесь нет эффекта, но когда на самом деле его выполняется, его можно найти, что результат выполнения появится через секунду или два. Если опция -w не добавляется, результат выполнения будет отображаться немедленно.
Кодировать слова непросто, если вы найдете это полезным, пожалуйста, поставьте лайк и уходите~
-----------------
Публичный аккаунт поиска WeChat【Хороший линукс], ключевое слово фонового ответа:
Отвечать【1024]: Бесплатный доступ к огромным техническим ресурсам, которые постоянно обновляются;
Отвечать【CSDN]: бесплатный доступ к группе загрузки ресурсов CSDN;
Отвечать【в группу]: Бесплатный доступ к основной группе обмена технологиями Ruyun.
Обмен галантерейными товарами · Обмен ресурсами · Улучшение когнитивных функций · Изучение английского языка
Кодировать слова непросто, если вы найдете это полезным, пожалуйста, поставьте лайк и уходите~
-----------------
Я Лян Сюй,Топ 500Иностранная компания Linux-разработчик, специализирующаяся на производстве Linux-галантереи. Добро пожаловать, чтобы обратить внимание на мой публичный номер "Хороший линукс",Отвечать"1024"Получите самую свежую и полную техническую информацию, ответьте"вступить в группу«Войдите в экспертную группу по обмену технологиями Ruyun.