Предположим, вам дали задание определить процессы, использующие определенный файл, и затем убить их один за другим – все это должно быть сделано из командной строки. Что бы вы сделали? Ну, если вы новичок в командной строке, я уверен, что вы не будете разбираться и попросите помощи.
Но профессионалы командной строки, вероятно, знают, что утилита командной строки в Linux позволяет идентифицировать процессы на основе файлов (каталогов или сокетов), к которым они обращаются. Мало того, эта утилита также позволяет вам убить эти процессы, так что вам не придется использовать команды kill или killall отдельно. Утилита командной строки, о которой мы говорим, это fuser.
Если вы еще не знакомы с этой утилитой и хотите понять, как ее использовать, не останавливайтесь на достигнутом, поскольку в этой статье мы подробно рассмотрим fuser на нескольких понятных примерах.
Но прежде чем двигаться дальше, пожалуйста, имейте в виду, что все примеры, команды и инструкции, упомянутые в этом руководстве, были протестированы на Ubuntu 22.04 LTS.
Команда Linux fuser
Как я уже упоминал выше, команда fuser в основном используется для идентификации процессов с помощью файлов, каталогов или сокетов. Она отображает PID процессов, использующих файл, имя которого передано в качестве аргумента команде.
Вот команда fuser в действии в самой простой форме:
Как видно из скриншота выше, мы попытались использовать fuser, чтобы узнать, какие процессы используют каталог /home/himanshu, и команда – в своем выводе – выдала список идентификаторов процессов. Пока все хорошо, но здесь есть пара проблем.
Во-первых, что это за «c», добавляемое к каждому PID? Быстрый взгляд на man page команды показывает, что в режиме отображения по умолчанию команда fuser не только отображает PID процессов, обращающихся к файлу или каталогу, но и показывает тип доступа.
Каждый тип доступа обозначается буквой:
- c – текущий каталог.
- e – исполняемый файл.
- f – открыть файл. f опущено в режиме отображения по умолчанию.
- F – открыть файл для записи. F опущено в режиме отображения по умолчанию.
- r – корневой каталог.
- m – mmap’ed файл или разделяемая библиотека.
Теперь, возвращаясь к примеру, который мы обсуждали, буква „c“ в выводе означает, что все процессы, чьи PID перечислены в выводе, обращаются к каталогу /home/himanshu как к своему текущему каталогу.
Напомним, что процесс может иметь несколько типов доступа к файлу или каталогу. Например, следующий вывод показывает, что многие процессы обращаются к корневому каталогу (/) как к текущему и корневому каталогу.
До сих пор вывод fuser, который мы видим, содержит только идентификаторы процессов, и не более того. Не будет ли лучше, если имена процессов также будут отображаться? Для этого нужно использовать опцию командной строки -v. Вот пример:
Для того чтобы добавить имя пользователя владельца процесса к каждому PID, используйте опцию командной строки -u. Вот пример:
Примечание: Если рассматриваемый файл или каталог расположен на смонтированной файловой системе или блочном устройстве, используйте опцию командной строки -m. «Перечисляются все процессы, обращающиеся к файлам на этой файловой системе», – говорится на странице руководства. «Если указан файл каталога, он автоматически изменяется на NAME/. для использования любой файловой системы, которая может быть смонтирована в этом каталоге.»
Как убить процессы с помощью fuser
Теперь, когда мы обсудили основы fuser, давайте перейдем к задаче, о которой я говорил в начале – как убить процессы с помощью fuser? Давайте рассмотрим более простой пример для этого случая. Я запущу исполняемый файл и, пока он работает, попробую убить процесс с помощью fuser.
Итак, вот запущенный исполняемый файл:
А вот команда fuser, которая в идеале должна убить процесс, инициированный исполняемым файлом test-fuser.
fuser -v -k test-fuser
О, прежде чем я выполню эту команду, позвольте мне сказать вам, что опция командной строки -k указывает fuser убить процесс (или процессы), использующий файл или каталог.
Вот что произошло, когда вышеупомянутая команда была выполнена:
Как видно из скриншота выше, использование опции командной строки -k с fuser убило процесс test-fuser. Чтобы убедиться, что команда fuser запрашивает подтверждение пользователя перед убийством процесса, используйте опцию -i. Смотрите пример ниже:
Ниже приведена пара важных деталей, связанных с fuser, которые вы должны знать при использовании опции -k:
- При использовании опции -k команда fuser по умолчанию посылает сигнал SIGKILL. Но вы можете изменить это поведение, используя опцию -SIGNAL.
- Процесс fuser никогда не убивает сам себя, но может убивать другие процессы fuser.
fuser – другие детали
Кроме упомянутой выше информации, стоит помнить еще о нескольких деталях. Всю эту информацию можно получить, перейдя по ссылке man page команды.
Заключение
Как вы уже поняли, fuser – это чрезвычайно полезная утилита командной строки в Linux. Хорошо то, что инструмент не сложен ни для понимания, ни для использования, так что даже новички могут легко начать работу с ним. Один аспект, который мы здесь не затронули, заключается в том, что команда позволяет идентифицировать и даже убивать процессы, запущенные на определенных портах, что делает ее незаменимым инструментом для сетевых администраторов.
Комментарии (0)