Каждая запущеная программа имеет уникальный номер, 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), приостанавливать, нажав [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
показывает данные работы запущекнных процессов. Смотрите так-же htop
с htop.sourceforge.net, это более расширенная версия программы, работает на LInux и FreeBSD(ports/sysutils/htop/
). Что-бы получить справку по ключам, во время работы top
, нажмите h. Вот некоторые полезные ключи:
Прерывание процессов или посылка сигнала с помощью команд 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
Наиболее важные сигналы:
HUP
Часто используется для перечитывания конфигурационных файловINT
Прервать(interrupt)QUIT
ВыйтиKILL
Безусловно прибить процессTERM
Мягкое прерывание