psmisc - небольшой набор утилит, которые часто оказываются полезнее, чем кажутся на первый взгляд. Обычно пакет ставят ради трех команд:
fuser, pstree, killall▪️ Установка:
apt install psmisc
# или:
yum install psmisc
▪️ fuser: кто держит файл, порт или mount point. fuser показывает процессы, которые используют файл, каталог, сокет или файловую систему. Например, не получается размонтировать диск:
umount /mnt/backup
А в ответ:
target is busyСмотрим, кто держит mount point:
fuser -vm /mnt/backup
Можно увидеть PID, пользователя и тип доступа. Если нужно аккуратно завершить процессы:
fuser -k /mnt/backup
Но с
-k лучше не спешить. Сначала посмотреть, потом убивать.Еще полезный пример - кто держит TCP-порт:
fuser -v 8080/tcp
Или UDP:
fuser -v 53/udp
▪️ pstree: дерево процессов вместо каши.
ps aux часто превращается в простыню. pstree показывает процессы в виде дерева: кто кого запустил и где родительский процесс.
pstree
С PID:
pstree -p
Для конкретного пользователя:
pstree -u username
Для конкретного процесса:
pstree -p 1234
Это очень удобно, когда нужно понять:
• какой процесс породил дочерние
• кто держит worker’ы
• почему после остановки сервиса остались потомки
• откуда запущен странный процесс
• что происходит внутри shell-сессии или скрипта
Например, при зависшем deploy можно быстро увидеть цепочку:
sshd───bash───deploy.sh───rsync
И уже понятно, кого действительно нужно трогать.
▪️ killall: завершить процессы по имени. killall убивает процессы по имени, а не по PID. Например:
killall nginx
или мягко через TERM:
killall -TERM nginx
Если процесс не реагирует:
killall -KILL nginx
Но KILL - это крайний вариант. Сначала лучше отправлять TERM, чтобы процесс мог корректно завершиться. Можно посмотреть, что будет затронуто:
pgrep -a nginx
А уже потом использовать killall.
killall работает по имени процесса. Если на сервере есть несколько процессов с одинаковым именем, можно задеть лишнее.Особенно осторожно с короткими именами и системными процессами.
Хороший порядок в админке такой:
fuser -vm /mnt/backup
pstree -p
pgrep -a process_name
killall -TERM process_name
Сначала понять, кто держит ресурс. Потом посмотреть дерево процессов. И только потом что-то завершать.
#linux #psmisc
🧑💻 NetworkAdmin