Одной из важнейших задач при администрировании систем Linux является управление процессами, которое включает в себя несколько операций, таких как мониторинг, передача сигналов процессам и установка приоритетов процессов в системе.
Существует множество инструментов/утилит Linux, предназначенных для мониторинга и управления процессами, таких как top, ps, pgrep, kill, killall, nice и многие другие.
В этой статье мы расскажем, как находить процессы с помощью мощной и многофункциональной утилиты Linux под названием fuser
.
fuser
— это простая, но мощная утилита командной строки, предназначенная для поиска процессов по файлам, каталогам или сокетам, к которым обращается конкретный процесс. Короче говоря, она помогает пользователю системы определить, какие процессы используют определённые файлы или сокеты.
Основной синтаксис для использования fuser
таков:
fuser [options] [file|socket] fuser [options] -SIGNAL [file|socket] fuser -l
fuser
без каких-либо параметров отображаются идентификаторы процессов, которые в данный момент обращаются к вашему текущему рабочему каталогу.fuser . OR fuser /home/tecmint
Для получения более подробного и понятного вывода включите -v
или --verbose
следующим образом. В выводе fuser
отображается имя текущего каталога, затем столбцы с информацией о владельце процесса (USER), идентификаторе процесса (PID), типе доступа (ACCESS) и команде (COMMAND).
fuser -v .
В столбце ACCESS
вы увидите типы доступа, обозначенные следующими буквами:
c
– текущий каталог.e
– исполняемый файл, который выполняется.f
– однако открытый файл f
не учитывается в выходных данных.F
– открытый файл для записи, F
также исключается из выходных данных.r
– корневой каталог.m
– файл mmap’ed или общая библиотека.
Чтобы определить, какие процессы обращаются к вашему файлу ~/.bashrc
, запустите:
fuser -v -m .bashrc
Опция -m NAME
или --mount NAME
показывает все процессы, обращающиеся к заданному файлу или каталогу. Если вы передаёте каталог как NAME
, он автоматически добавляет /
для ссылки на файловую систему, подключённую к этому каталогу.
Другой практический пример использования — определение того, какой процесс использует конкретный сетевой порт. Это особенно полезно для отладки конфликтов служб.
sudo fuser 80/tcp или sudo fuser -v 80/tcp
Здесь будет показан PID процесса, использующего TCP-порт 80. Добавьте -v
для получения подробного вывода.
Чтобы завершить все процессы, обращающиеся к файлу или сокету, используйте опцию -k
или --kill
sudo fuser -k .
Чтобы в интерактивном режиме завершить процесс, при котором вас попросят подтвердить намерение завершить процессы, обращающиеся к файлу или сокету, используйте опцию -i
или --interactive
sudo fuser -ki .
Две предыдущие команды завершат все процессы, обращающиеся к вашему текущему каталогу; по умолчанию процессам отправляется сигнал SIGKILL
, за исключением случаев, когда используется -SIGNAL
Вы можете вывести список всех сигналов, используя параметры -l
или –-list-signals
ниже.
sudo fuser --list-signals
Таким образом, вы можете отправить сигнал процессам с помощью следующей команды, где SIGNAL
— любой из сигналов, перечисленных выше.
sudo fuser -k -SIGNAL
Например, чтобы отправить сигнал HUP (завершение вызова) процессам, обращающимся к /boot
.
sudo fuser -k -HUP /boot
Для более подробного использования ознакомьтесь со страницей руководства fuser
.
man fuser
Команда fuser
может быть не первым инструментом, который приходит на ум при управлении процессами, но это скрытая жемчужина для любого пользователя Linux или системного администратора. Она идеально подходит для определения того, какие процессы используют определённые файлы, каталоги или порты, и позволяет напрямую с ними взаимодействовать.
Если вы работаете с файлами, каталогами или сетевыми службами в системе Linux, изучение fuser
на 100% стоит вашего времени.