PR

Linuxでファイルを使用しているプロセスをfuserコマンドで確認して特定する

スポンサーリンク
Linux

サーバー運用をしていると、容量確保や不要ファイル消去が必ず発生します。

しかし、もしプロセスがファイルを掴んでいる時にそのファイルを削除してしまうと、プロセスがエラーを吐いてしまいます。

そんな時のために、今回はファイルを掴んでいるプロセスを確認する方法を紹介します。

逆に、プロセスが掴んでいるファイルを確認する方法に関しては、以下を参照してください。

Linuxでプロセスが掴んでいるファイルを確認する方法
Linuxサーバで「ログローテートしたいのに、プロセスが掴みっぱなしでローテーションできない」、「NFSマウント外したいのにファイルを掴みっぱなしでNFSマウントが外せない」等でプロセスが掴んでいるファイルを特定したい時の方法を紹介します。

ファイルを使用しているプロセスを確認

ファイルに対してどのプロセスが使用しているか特定するには、fuserコマンドに -v オプションを付けて確認する事が出来ます。

以下はMySQLのエラーログ(/var/log/mysqld.log)に対して、fuserコマンドを実行した結果となり、mysqldプロセスがファイルを使用していることが確認できます。

どのユーザが、どのプロセス(PIDも含め)でファイルを使用しているか特定できます。

[root@cent77 ~]# fuser -v /var/log/mysqld.log
                     USER        PID ACCESS COMMAND
/var/log/mysqld.log: mysql      1122 F.... mysqld

fuserコマンドが存在しない場合は、psmisc パッケージをインストールしてください。

CentOS7のDVDインストールメディア(isoファイル)に入っています。

[root@cent77 ~]# yum install psmisc
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * c7-media:
c7-media                                                                                         | 3.6 kB  00:00:00
Resolving Dependencies
--> Running transaction check
---> Package psmisc.x86_64 0:22.20-16.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                   Arch                      Version                          Repository                   Size
========================================================================================================================
Installing:
 psmisc                    x86_64                    22.20-16.el7                     c7-media                    141 k

Transaction Summary
========================================================================================================================
Install  1 Package

Total download size: 141 k
Installed size: 475 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : psmisc-22.20-16.el7.x86_64                                                                           1/1
  Verifying  : psmisc-22.20-16.el7.x86_64                                                                           1/1

Installed:
  psmisc.x86_64 0:22.20-16.el7

Complete!

ファイルシステムを使用しているプロセスを特定する方法

fuserコマンドはファイルからのプロセス特定のみでなく、ファイルシステムに対しても、どのプロセスが使用しているかを特定することが可能です。

例えば、NFSマウントを外したい時に外れない時は、NFSを使用しているプロセスを特定し、停止やkillした後にNFSをアンマウントします。

fuserコマンドのオプションは -vm となります。

[root@cent77 ~]# fuser -vm /nfs_srv
                     USER        PID ACCESS COMMAND
/nfs_srv:            dekien     1459 .rce. sshd
                     dekien     1460 .rce. bash