Процессы

]]>Список процессов]]> / ]]>Приоритет процессов]]> / ]]>Background/Foreground]]> / ]]>Программа top]]> / ]]>Команда kill]]>

Список процессов и PID

Каждая запущеная программа в операциооных системах Unix ( и не только ), имеет уникальный номер, PID процесса. Список всех запущенных процессов можно получить утилитой ps.

# ps -auxefw                         # Полный список всех запущеных процессов

Однако, зачастую, целесообразней использовать эту команду с выводом на pgrep:

# ps axww | grep cron
  586  ??  Is     0:01.48 /usr/sbin/cron -s
# ps axjf                            # Все процессы в виде дерева (Linux)
# ps aux | grep 'ss[h]'              # Найти все PID процесса ssh, исключая PID процесса grep
# pgrep -l sshd                      # Найти PID процесса по имени(или по его части)
# echo $$                            # PID процесса текушей оболочки
# fuser -va 22/tcp                   # Список процессов использующих порт 22 (Linux)
# pmap PID                           # Карта памяти процессов (выявление утечек памяти) (Linux)
# fuser -va /home                    # Список процессов, имеющих доступ в раздел /home
# strace df                          # Отслеживать(Trace) системные вызовы и сигналы
# truss df                           # Тоже что и выше, но на FreeBSD/Solaris/Unixware

Приоритет процесса

Изменить приоритет процесса можно командой renice. Отрицательное значение, означает более высокий приоритет.

# renice -5 586                      # Повысить приоритет процесса с PID 586
586: old priority 0, new priority -5

C помощью nice можно запускать процессы с определенным приоритетом. Что-бы узнать, используете вы, /usr/bin/nice или nice встроенный в шелл, используйте which nice).

# nice -n -5 top                     # Повысить приоритет процесса(/usr/bin/nice)
# nice -n 5 top                      # Понизить приоритет процесса(/usr/bin/nice)
# nice +5 top                        # nice Встроенный в шелл, понизить приоритет процесса

В то время как nice отвечает за распределение процессорного времени, другая полезная команда ionice, распределяет дисковый IO. Она весьма полезна в случае приложений, активно использующих дисковый IO (например компилирование). Вы можете установить для приложения соответствующий класс ( idle - best effort - real time), загляните в man, там все довольно доступно рассказано.

# ionice c3 -p123                    # Установить класс idle для pid 123 (только Linux)
# ionice -c2 -n0 firefox             # Запустить Фаерфокс с высоким приоритетом и классом best effort
# ionice -c3 -p$$                    # Установить для текущей оболочки класс idla

Последняя команда очень полезна при компилировании или отладке больших проектов. Любая команда, запущенная из текущей оболочки будет иметь пониженный приоритет. Переменная $$, содержит PID текушей оболочки (попробуйте echo $$)
FreeBSD использует idprio/rtprio (0 = максимальный приоритет, 31 = наиболее свободный(most idle)):

# idprio 31 make                     # Компилировать с низким приоритетом
# idprio 31 -1234                    # Установить низкий приоритет для PID 1234
# idprio -t -1234                    # -t удаляет real time/idle приоритеты

background/foreground

Процессы запущенные в шелле, можно переключать в фоновый режим(background), приостанавливать, нажав [Ctrl]-[Z], и выводить обратно в foreground, так-же можно использовать команды bg and fg. Команда jobs, выведет списох запущенных в фоновом режиме процессов.

# ping cb.vu > ping.log
^Z                                   # Команда ping приостановлена [Ctrl]-[Z] 
# bg                                 # Отправить в фон и продолжать выполнение
# jobs -l                            # Список фоновых процессов
[1]  - 36232 Running                       ping cb.vu > ping.log
[2]  + 36233 Suspended (tty output)        top
# fg %2                              # Вернуть процесс 2 в обычный режим

Что-бы процесс продолжал свое выполнение после закрытия оболочки, можно воспользоваться командой nohup.

# nohup ping -i 60 > ping.log &

Программа top

Программа top показывает работчие данные по запущенным процессфм. Так-же обратите внимание на программу htop, это более расширенная версия программы, работает на Linux и FreeBSD (/usr/ports/sysutils/htop ). Что-бы получить справку по ключам, во время работы top, нажмите h. Вот некоторые полезные ключи:

  • u [имя пользователя] Посмотреть процессы принадлежащие конкретному пользователю. Используйте + или пробел для возврата в режим полного просмотра.
  • k [pid] - Убить (завершить) процесс с pid.
  • 1 - Показать статистику по процессору (только Linux)
  • R - Переключить сортировку

Команда kill

Остановка процессов или отправка сигнала с помощью команд kill или killall.

# ping -i 60 cb.vu > ping.log &
[1] 4712
# kill -s TERM 4712                  # то-же что и kill -15 4712
# killall -1 httpd                   # отправить сигнал HUP процессу с точным именем
# pkill -9 http                      # отправить сигнал TERM процессу с именем или его частью
# pkill -TERM -u www                 # отправить сигнал TERM процессу выполняющемуся от имени конкретного пользователя
# fuser -k -TERM -m /home            # убить процессы имеющие доступ к /home 

Наиболее важные сигналы:

  • 1 HUP - Часто используется для перечитывания конфигурационных файлов
  • 2 INT - Прервать(interrupt)
  • 3 QUIT - Выйти
  • 9 KILL - Безусловно прибить процесс
  • 15 TERM - Мягкое прерывание