1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Основным инструментом для исследования процессов является команда ps. Она выводит состояние процессов на момент ее выполнения в системе. Без опций она выводит список процессов, связанных с текущим терминалом. Подробную информацию можно получить с помощью опции -f (full format). Еще более подробную информацию предоставляет опция -l (long format). PID - отображает идентификаторы процессов TTY - имена терминалов TIME - суммарное процессорное время, затраченное процессом с момента его старта. CMD - командная строка процесса PPID - родителе процесса C - фактор загрузки процессора (требуется планировщику для расчета приоритета процесса) UID - владельца процесса STIME - показывает время запуска процесса Столбец S - статус процесса, который может быть: D - процесс приостановлен и не может быть прерван (например, ожидает окончания ввода/вывода); R - процесс выполняется или находится в очереди; S - процесс приостановлен; T - процесс трассируется; Z - процесс помечен как defunct (zombie). Столбец NI - показывает величину nice number. Эта величина устанавливается пользователем и участвует в вычислении приоритета процесса планировщиком. Столбец SZ - количество памяти, занимаемое процессом, а WCHAN — это информация о системном вызове, произведенном процессом. Ещё ключи ps: ps -e - позволяющая вывести список всех процессов системе (аналог — опция –A). ps -ef - подробную информацию о процессах ps -u - фильтрация по UID ps -t - фильтрация по терминалу ps -p - фильтрация по PID искомого процесса ps -C - фильтрация по командной строке ps -faxu - подробная информация о процессах, пользователях ps aux - подробная информация о процессах, пользователях ps –L - для получения информации о потоках pgrep bash ps -f U root ps -fLC swriter.bin Удобно использовать также команду w, демонстрирующую список всех вошедших в сеанс пользователей и запущенные ими задания. |
Сигналы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Сигналы — это один из способов межпроцессного взаимодействия. Они обеспечивают возможность обмена процессами элементарными сообщениями. Получив сигнал, процесс может отреагировать на него по-разному в зависимости от полученного сигнала и действий, запрограммированных в коде процесса. Так, например, процесс может перечитать файл конфигурации или завершить работу. Список сигналов, используемых в системе, можно получить с помощью команды kill -l, а их подробное описание доступно с помощью man 7 signal. Наиболее часто используются сигналы, приведенные в списке далее: 1 - HUP, разрыв связи с терминалом (Hang Up — положить трубку). Многие демоны используют этот сигнал, как команду перечитать их конфигурационный файл и продолжить работу с измененными настройками. Оболочка Bash реагирует на этот сигнал завершением сеанса 2 - INT, прерывание процесса. Генерируется при нажатии комбинации клавиш <Ctrl>+<C> 3 - QUIT, сброс процесса. Генерируется при нажатии комбинации клавиш <Ctrl>+<\> 15 - TERM, сигнал для корректного завершения процесса Этот сигнал команда kill посылает по умолчанию 9 - KILL, аварийное завершение процесса Каким образом то или иное приложение реагирует на получение некоторого сигнала, зависит от того, как эта программа написана. В программе получение сигнала может перехватываться и обрабатываться специальным образом. Сигнал KILL (9) не может быть перехвачен. Этот сигнал приводит к немедленному и, таким образом, часто некорректному снятию процесса с исполнения. При этом файлы, открытые процессом, не закрываются нормальным способом, что может привести к потере данных. Если необходимо послать сигнал некоторым процессам, то сначала требуется узнать PID этих процессов, а затем с помощью команды kill послать им требуемый сигнал, номер которого указывается после тире. Если номер сигнала или его имя не задано после дефиса, то команда kill посылает целевым процессам сигнал 15 (TERM). Так, например, можно попытаться послать сигнал оболочке bash. Посылать сигналы процессам могут только их владелец и суперпользователь. Если родительским процессом получен сигнал, приводящий к его остановке, то в нормальной ситуации будут сняты с выполнения все его дочерние процессы. Удобно пользоваться командами pkill и killall. В отличие от команды kill, для команд pkill и killall достаточно указать имя командной строки процесса. killall -9 httpd pkill httpd |