Список процессов и 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 - Мягкое прерывание