Эта статья участвует в "Тридцать лет Linux"Тема заявки на доклады
Введение
Я имел дело со многими программистами, эти программисты могут быть знакомы с несколькими способами написания для обхода, но они ничего не знают о среде, в которой развернута написанная программа. Могу поспорить, что немногие программисты знают, как работает tomcat после весенней загрузки. Для них выполняется запуск баночки.
Расширенный характер инструментов действительно приносит нам много удобства, повышает эффективность разработки программистов и снижает порог входа для программистов. Сегодня я хотел бы обсудить с вами, для чего используется команда kill в Linux.
Возможно, многие друзья впервые связались с командой kill, когда их коллеги сказали ему убить процесс. Так действительно ли kill используется для уничтожения процессов?
используйте kill, чтобы убить процесс
Давайте сначала рассмотрим самое простое и наиболее распространенное применение команды kill — уничтожение процесса. Прежде чем убить процесс, нам нужно найти этот идентификатор процесса.
В обычных условиях используйте команду ps, чтобы найти идентификатор процесса. Присоединитесь к этому процессу ID=54321.
Затем вы можете использовать kill 54321, чтобы убить процесс.
Более старшие студенты также могут использовать kill -9 54321, чтобы принудительно завершить процесс.
Есть ли более глубокое использование? Да, давайте посмотрим.
Подробное использование kill
Давайте сначала посмотрим на параметры команды kill:
kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Вы можете видеть, что параметром kill является sig, который является сигналом. То есть суть kill заключается в передаче сигналов программе.
Если мы используем kill -l , мы можем точно узнать, сколько сигналов может доставить kill:
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Всего сигналов 64, и могут быть разные версии уничтожения.Сигналы разные, но в основном охватывают часто используемые сигналы.
Вот значения некоторых общих сигналов:
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
Как посмотреть версию kill?
/bin/kill --version
kill from util-linux 2.23.2
Если kill не проходит sig, он передает значение sig=TERM по умолчанию, равное 15. Таким образом, приведенные выше kill 54321 и kill -15 54321 эквивалентны.
В общем, мы предпочитаем использовать сигнал SIGTERM. Это связано с тем, что когда программа получает сигнал SIGTERM, она выполняет некоторые операции по очистке программы или корректно завершает работу.
Если вы передадите kill -9, то есть SIGKILL, приложение не сможет перехватить этот сигнал, что приведет к принудительному завершению работы программы, что может привести к некоторым нештатным ситуациям, например, если данные не были сохранены. передача данных не закончилась и так далее.
sig также имеет специальное значение, называемое 0. Если передается 0, реальный сигнал посылаться не будет.Это используется только для обнаружения аномалий.
pid — это идентификатор процесса, который можно понимать как номер процесса. В дополнение к идентификатору процесса вы также можете передать некоторые специальные значения, такие как:
- 0 означает все процессы в текущей группе процессов
- -1 означает все процессы с PID>1
Существует также специальный pid=1, который представляет начальный процесс init, который нельзя убить.
В дополнение к PID мы видим, что kill также может принимать спецификацию задания. Идентификатор задания можно просмотреть с помощью команды jobs.
Зомби процесс и убить
Как упоминалось выше, начальный процесс с pid=1 нельзя убить. Другой процесс, который нельзя убить, называется зомби-процессом.
Процесс зомби — это очень уникальное состояние в программе linux, это означает, что процесс завершился, но он не умер полностью, как и зомби.
Пять основных состояний процесса в linux: RUNNING: работает или ожидает запуска, UNINTERRUPTABLE: состояние непрерывной блокировки, INTERRUPTABLE: состояние прерываемой блокировки, STOPPED: приостановленное состояние и ZOMBIE: состояние зомби.
Так что же такое зомби-процесс?
Зомби-процесс означает, что после выхода из программы процесс не исчезает сразу, а сохраняет структуру данных, называемую зомби. Эта структура данных особенная, потому что у нее нет места в памяти, нет исполняемого кода и, конечно же, ее нельзя планировать. Он просто занимает позицию в списке процессов и записывает различную информацию при завершении процесса.
Процесс-зомби в основном зарезервирован для выхода из процесса для анализа и использования родительским процессом или системным администратором, поэтому процесс-зомби собирается и освобождается родительским процессом. Поскольку процесс-зомби уже завершился, использовать kill бесполезно.Вы можете только дождаться завершения родительского процесса, прежде чем он сможет завершиться по-настоящему.
Как проверить процесс зомбирования? Самый простой способ — использовать команду top:
top - 14:34:38 up 305 days, 4:23, 2 users, load average: 0.20, 0.29, 0.47
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.0 us, 0.7 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882008 total, 525524 free, 311440 used, 1045044 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1382560 avail Mem
В приведенном выше выводе мы видим, что в нем 0 зомби.
java thread dump
Другим очень полезным местом для уничтожения является создание дампа потока Java-программы, создание дампа информации о потоке текущей Java-программы и выполнение некоторого полезного анализа, такого как анализ взаимоблокировок.
Как сделать дамп потока java-процесса? Это так же просто, как использовать команду kill -3:
kill -3 <pid>
Из нашего введения выше мы можем указать, что сигнал, представленный 3, является SIGQUIT. Это показывает, что JVM имеет встроенный захват этого сигнала.Если этот сигнал получен, он выдаст информацию о текущем потоке.
дамп потока java очень полезен для анализа потоков в java.
Суммировать
В этой статье подробно рассказывается об использовании kill и лежащем в его основе принципе работы, а также рассказывается о нескольких применениях kill Я надеюсь, что в следующий раз, когда кто-то спросит вас, что такое kill, каждый с гордостью ответит ему!
Эта статья была включена вwoohoo. Флойд press.com/01-это-есть-…
Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!
Добро пожаловать, чтобы обратить внимание на мой официальный аккаунт: «Программируйте эти вещи», разбирайтесь в технологиях, лучше поймите себя!