openSUSE Leap15 で fuser, ファイルロックしているプロセスを強制停止

SUSE Linux での fuser、ファイルを開いているプロセスを kill します。

マウント中のデバイスを umount しようとすると ”Device busy” なんてことがあります。あるいは、ファイルを開こうとしたら、ファイルがゾンビなプロセスなんかに、ロックされている。

そんな時に覚えておきたいコマンドが lsof と fuser です。

lsof はインストールされていないようなので、YaST か zypper を使ってインストールします。

SUSE Linux でパッケージインストールの色々な方法





- fuser のヘルプ -

まずは使い方から

opensuse151:~ # fuser
No process specification given
Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]
[-k [-i] [-SIGNAL]] NAME...
fuser -l
fuser -V
Show which processes use the named files, sockets, or filesystems.

-a,--all display unused files too
-i,--interactive ask before killing (ignored without -k)
-I,--inode use always inodes to compare files
-k,--kill kill processes accessing the named file
-l,--list-signals list available signal names
-m,--mount show all processes using the named filesystems or
block device
-M,--ismountpoint fulfill request only if NAME is a mount point
-n,--namespace SPACE search in this name space (file, udp, or tcp)
-s,--silent silent operation
-SIGNAL send this signal instead of SIGKILL
-u,--user display user IDs
-v,--verbose verbose output
-w,--writeonly kill only processes with write access
-V,--version display version information
-4,--ipv4 search IPv4 sockets only
-6,--ipv6 search IPv6 sockets only
- reset options

udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]


- lsof でディレクトリ以下のオープンファイルを確認 -

opensuse151:~ #
opensuse151:~ # lsof /home/
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sftp-serv 21170 knakaj cwd DIR 0,47 404 258 /home/knakaj
bash 21204 knakaj cwd DIR 0,47 404 258 /home/knakaj
oosplash 23270 knakaj cwd DIR 0,47 404 258 /home/knakaj
soffice.b 23289 knakaj cwd DIR 0,47 404 258 /home/knakaj
soffice.b 23289 knakaj 3u REG 0,47 8107 826 /home/knakaj/test/test.odt
soffice.b 23289 knakaj 24uW REG 0,47 91 728 /home/knakaj/.config/libreoffice/4/user/uno_packages/cache/log.txt
soffice.b 23289 knakaj 26uW REG 0,47 127 772 /home/knakaj/.config/libreoffice/4/user/extensions/bundled/extensions.pmap
dbus-daem 23304 knakaj cwd DIR 0,47 404 258 /home/knakaj
at-spi-bu 23305 knakaj cwd DIR 0,47 404 258 /home/knakaj
at-spi-bu 23305 knakaj mem REG 0,47 787 825 /home/knakaj/.config/dconf/user
dbus-daem 23310 knakaj cwd DIR 0,47 404 258 /home/knakaj
at-spi2-r 23312 knakaj cwd DIR 0,47 404 258 /home/knakaj
gvfsd 23318 knakaj cwd DIR 0,47 404 258 /home/knakaj
gvfsd-fus 23323 knakaj cwd DIR 0,47 404 258 /home/knakaj


- fuser でオープンファイル、プロセスID、ユーザを確認 -

-a 全部、-u ユーザID、-v 詳細モード

opensuse151:~ # fuser -avu /home/knakaj/test/test.odt
USER PID ACCESS COMMAND
/home/knakaj/test/test.odt:
knakaj 23289 F.... (knakaj)soffice.bin


- fuser でオープンしているプロセスを kill -

-k で kill、 -i で kill の確認メッセージ

opensuse151:~ # fuser -avuki /home/knakaj/test/test.odt
USER PID ACCESS COMMAND
/home/knakaj/test/test.odt:
knakaj 23289 F.... (knakaj)soffice.bin
Kill process 23289 ? (y/N) y
opensuse151:~ #


- マウント中のデバイスとユーザ、プロセスの確認 -

-m でマウントオプション

opensuse151:~ # fuser -mauv /mnt/sdc
USER PID ACCESS COMMAND
/mnt/sdc: root kernel mount (root)/mnt/sdc
knakaj 22618 f.c.. (knakaj)smbd
opensuse151:~ #


-m と ki オプションでモンダイの smb プロセスを kill する。

opensuse151:~ # fuser -mauvki /mnt/sdc
USER PID ACCESS COMMAND
/mnt/sdc: root kernel mount (root)/mnt/sdc
knakaj 21867 f.c.. (knakaj)smbd
Kill process 21867 ? (y/N) y


セッションが kill され、開いているファイルがリセットされました。

ディレクトリに cd している場合は bash がディレクトリファイルをオープンしています。よくある話。

opensuse151:/home/knakaj # fuser -vau .
USER PID ACCESS COMMAND
/home/knakaj: root 22884 ..c.. (root)bash
root 22982 ..c.. (root)fuser
opensuse151:/home/knakaj #
opensuse151:/home/knakaj # fuser -vau /home/knakaj/
USER PID ACCESS COMMAND
/home/knakaj: root 22884 ..c.. (root)bash
root 23149 ..c.. (root)fuser
opensuse151:/home/knakaj # cd ..
opensuse151:/home # fuser -vau /home/knakaj/
USER PID ACCESS COMMAND
/home/knakaj:
opensuse151:/home #

※ ちなみに bash のプロセスを kill するとそのターミナルは固まります......





by islandcenter | 2020-02-19 12:45 | SUSE | Comments(0)