4.5.5. Синтаксис команды kill

KILL thread_id

Каждое соединение с mysqld запускается в отдельном потоке. При помощи команды SHOW PROCESSLIST можно просмотреть список запущенных потоков, а при помощи команды KILL thread_id - удалить поток.

Если у вас есть привилегия PROCESS, можно просмотреть все потоки. Обладая привилегией SUPER, можно удалять любые потоки. В противном случае можно просматривать и удалять только свои собственные потоки.

Для просмотра и удаления потоков можно также применять команды mysqladmin processlist и mysqladmin kill.

При использовании команды KILL для потока устанавливается специальный флаг kill flag.

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

В циклах SELECT, ORDER BY и GROUP BY флаг проверяется только после считывания блока строк. Если установлен флаг удаления, то выполнение оператора будет отменено.

При выполнении команды ALTER TABLE флаг удаления проверяется перед считыванием каждого блока строк из исходной таблицы. Если флаг установлен, то выполнение команды отменяется и временная таблица удаляется. При выполнении команд UPDATE и DELETE флаг удаления проверяется после каждого считывания блока, а также после каждого обновления или удаления строки. Если флаг удаления установлен, то выполнение оператора отменяется. Обратите внимание: если не используются транзакции, то отменить изменения будет невозможно!

GET_LOCK() будет отменен при помощи NULL.

Поток INSERT DELAYED быстро сбросит все строки, которые он содержит в памяти и будет удален.

Если поток находится в заблокированной таблице (состояние: Locked), то блокировка таблицы будет быстро отменена.

Если поток ожидает освобождения дискового пространства в запросе write, запись будет отменена с выдачей сообщения о переполнении диска.

Начало формы

WWW CITForum.ru

Конец формы

Новости мира IT:

12.11 - Google создал сервис по поиску очагов эпидемии гриппа

12.11 - Аналитики подсчитали себестоимость гуглофона

12.11 - Microsoft нашла вредоносное ПО в каждом сотом компьютере

12.11 - Дело пермского учителя Поносова возобновляется

12.11 - У пользователей Gmail появился видеочат

12.11 - Novell объявляет о поддержке Linux-пользователей Red Hat и CentOS

12.11 - Выпущена бета-версия мобильного браузера Opera Mini 4.2

12.11 - Интернет-зависимость признали клиническим заболеванием

12.11 - Американцы создали самый мощный суперкомпьютер в мире

12.11 - В Москве поставят памятник символу "@"

12.11 - T-Mobile запускает беспрецедентную рекламную кампанию G1 в онлайне

12.11 - Впервые в России ноутбуки по объему поставок обогнали настольные ПК

11.11 - Россия и Куба создадут «Остров Свободы» в противовес Microsoft

11.11 - Nvidia представила самую мощную видеокарту в мире

11.11 - Visa пробует пластиковые карты с одноразовыми кодами

11.11 - Microsoft заключила с Sun Microsystems соглашение по веб-поиску

11.11 - Начинается второй тур последнего Кубка Яндекса

11.11 - Dell отложила выпуск конкурента iPod

11.11 - Самыми дорогими российскими брендами оказались Билайн и МТС

10.11 - Sun выпускает новые открытые системы хранения

10.11 - Компания Huawei запустит первую сеть LTE в 2009 году

10.11 - Ericsson рассказала о своем видении мобильника 2012 года

10.11 - В карты Microsoft добавили панорамные фотографии

10.11 - MySpace планирует выпустить конкурента iPod

10.11 - Стив Балмер не увидел в Android конкурента для Windows Mobile

10.11 - Песню Led Zeppelin сыграли на телефонах iPhone

10.11 - Владельцы смартфонов Nokia могут публиковать записи в Блогах@Mail.Ru

07.11 - Microsoft прокомментировала готовность Yahoo возобновить переговоры о слиянии

07.11 - Microsoft готовит очередную порцию заплаток

07.11 - Последняя уязвимость Microsoft используется для кражи конфиденциальной информации

Все новости на CitCity.ru

Производство серверов Подбор сервера под задачу Он-лайн конфигуратор серверов

KILL(1)

НАЗВАНИЕ kill - терминирование процессов

СИНТАКСИС

kill [-номер_сигнала] идентификатор_процесса ...

ОПИСАНИЕ По умолчанию команда kill посылает сигнал 15 (завершиться) процессу с указанным идентификатором. Таким способом обычно терминируют процесс, который не устанавливает нестандартную реакцию на сигналы. Идентификаторы_процессов можно узнать по команде ps(1) (в колонке PID). Идентификатор асинхронно запущенного процесса сообщается shell'ом в момент запуска (в случае конвейера сообщается только идентификатор последнего процесса).

Подробно о терминировании процесов см. kill(2). Например, если указан процесс с номером 0, то сигнал будет послан всем процессам данной группы.

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

Если в качестве первого аргумента указан (с предшествующим знаком -) номер_сигнала, то вместо сигнала 15 посылается он [см. signal(2)]. Так, команда kill -9 ... уничтожает процесс наверняка, если, конечно, для уничтожения хватает прав.

Сигналы и контроль над процессами

Одной из задач опытных администраторов и пользователей является запуск, остановка и перезапуск сервисов, а также остановка сбойных и зависших процессов, причем с минимальным уроном. В различных операционных системах, а также в различных командных оболочках (шеллах) способы управления сигналами сильно рознятся. Поэтому в этой статье мы остановимся на ОС Linux и bash shell.

Сигналы нужны для того, чтобы взаимодействовать с процессами и демонами. Процессом называется любое активное действие. Демоны являются фоновыми (background) процессами, и до поры скрыты. Они ждут либо события, на которое они отреагируют, либо наступления времени, назначенного для выполнения некоего задания по расписанию. О наступлении этого события они узнают, получая сигнал от какого-то другого процесса. Каждая программа должна иметь в своем коде обработчик сигналов, чтобы отслеживать (перехватывать) сигналы и правильно реагировать на них. Страница руководства man signal описывает всевозможные сигналы и их действия. Сигналы посылают при помощи команды kill ("убить"). Команда kill -l выводит список сигналов и их номеров.

Все демоны и процессы имеют Идентификатор Процесса (PID). PID процесса можно узнать при помощи команды ps:

$ ps aux

USER PID %CPU %MEM TTY STAT COMMAND

root 1 0.0 0.1 ? S init '2'

105 7783 0.0 0.2 ? Ss /usr/bin/dbus-daemon --system

hal 7796 0.0 0.7 ? Ss /usr/sbin/hald

postfix 7957 0.0 0.2 ? S qmgr -l -t fifo -u -c

nagios 8371 0.0 0.2 ? SNs /usr/sbin/nagios /etc/nagios/nagios.cfg

В приведенном выше примере, вывод команды сильно сокращен - в вашей системе вы увидите куда больше строк и столбцов. Если какой-нибудь процесс "ворует" мощность вашего процессора или вашу память, вы увидите это в столбцах %CPU и %MEM.

Еще быстрее "зарвавшийся" процесс можно обнаружить при помощи команды top. В ней, по умолчанию, процессы, потребляющие больше ресурсов процессора, расположены в верхних строках таблицы. Мы можем немного поиграть с программой top при помощи команды yes:

$ yes carla is teh awesum

Эта команда станет повторять "carla is teh awesum" с большой скоростью, пока вы ее не остановите. Она загонит процент использования процессора в красную зону:

$ top

...

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

12144 carla 25 0 31592 17m 13m R 93.4 3.5 0:50.26 konsole

22236 carla 15 0 2860 468 400 S 4.3 0.1 0:00.97 yes

Интересно, что ответственность за разбазаривание мощности CPU ложится на консоль, а не на программу yes, так как yes работает внутри консоли. Если вы перейдете на "истинную" консоль (Ctrl+Alt+F2), то там увидите программу yes с большими цифрами потребления мощности процессора и использования памяти.

Существует несколько способов остановить yes. Если вы перейдете обратно в шелл, где она работает, просто нажмите Ctrl+C. Вы можете также остановить ее при помощи команды kill в другом шелле, как по PID, так и по имени:

$ kill 22236 $ killall yes

Ctrl+C посылает с клавиатуры сигнал SIGINT (2), или завершающее прерывание (terminate interrupt). kill и killall, оба, шлют по умолчанию SIGTERM (15). SIGTERM (15) может быть перехвачен и, либо игнорирован, либо интерпретирован иначе. Так что, в случае непредсказуемой работы, вы можете не добиться завершения процесса.

Применяя команду kill к родительскому процессу, вы, как правило (но не всегда), завершаете дочерний вместе с ним. Как узнать, какой процесс является дочерним? Используйте команду ps с опцией -f :

$ ps axf

22371 ? R 2:35 _ konsole 'kdeinit'

22372 pts/3 Ss 0:00 | _ /bin/bash

24322 pts/3 S+ 0:00 | | _ yes carla is teh awesum

22381 pts/4 Rs 0:00 | _ /bin/bash

24323 pts/4 R+ 0:00 | | _ ps axf

Вернемся к нашим SIGHUP'ам

SIGHUP произносится как "сиг-ап" и означает "сигнал отбоя" (signal hangup). Как послать SIGHUP? Существует несколько способов:

# kill -HUP 'pid'

# killall -HUP 'process-name'

# kill -1 'pid'

# killall -1 'process-name'

Как видите, можно использовать PID или имя процесса, а также имя или номер сигнала.

Зачем применять все эти команды, когда можно перезапустить процессы при помощи команды /etc/init.d/foo restart? Ведь предпочтительней контролировать сервисы с помощью их файлов init, так как такой контроль обычно включает санацию, проверку ошибок и другие функции. Если говорить честно, то главная причина использовать команду kill и сигналы состоит в том, чтобы остановить зависший или сбойный процесс как можно аккуратнее, и не прибегать к перезагрузке или завершению сеанса.

Применение команды kill к процессам

Как можно видеть в man signal, существуют десятки способов контролировать процессы. Вот наиболее часто применяемые:

kill -STOP 'pid' SIGSTOP (19) останавливает процесс, не "убивая" его.

kill -CONT 'pid' SIGCONT (18) перезапускает остановленный процесс.

kill -KILL 'pid' SIGKILL (9) форсирует немедленное завершение процесса, и не производит никакой чистки.

kill -9 -1 Завершает все ваши процессы (которыми вы владеете).

SIGKILL и SIGSTOP не могут быть перехвачены, блокированы или игнорированы; остальные могут. Это ваше "большое ружье", последнее средство обороны.

Команда kill, встроенная в Bash

Оболочка Bash имеет встроенную команду kill, как показано в следующем листинге:

$ type -all kill kill is a shell built-in kill is /bin/kill

Маловероятно, что у вас возникнут конфликты или странное поведение программ, но на всякий случай выбирайте /bin/kill.

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

Ресурсы

Соседние файлы в папке материалы к собеседованию