2020年 02月 19日
openSUSE Leap15 で fuser, ファイルロックしているプロセスを強制停止
マウント中のデバイスを umount しようとすると ”Device busy” なんてことがあります。あるいは、ファイルを開こうとしたら、ファイルがゾンビなプロセスなんかに、ロックされている。そんな時に覚えておきたいコマンドが lsof と fuser です。lsof はインストールされていないようなので、YaST か zypper を使ってインストールします。
SUSE Linux でパッケージインストールの色々な方法
まずは使い方から
opensuse151:~ # fuserNo process specification givenUsage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE][-k [-i] [-SIGNAL]] NAME...fuser -lfuser -VShow 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 orblock 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 optionsudp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]
opensuse151:~ #opensuse151:~ # lsof /home/lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfsOutput information may be incomplete.COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsftp-serv 21170 knakaj cwd DIR 0,47 404 258 /home/knakajbash 21204 knakaj cwd DIR 0,47 404 258 /home/knakajoosplash 23270 knakaj cwd DIR 0,47 404 258 /home/knakajsoffice.b 23289 knakaj cwd DIR 0,47 404 258 /home/knakajsoffice.b 23289 knakaj 3u REG 0,47 8107 826 /home/knakaj/test/test.odtsoffice.b 23289 knakaj 24uW REG 0,47 91 728 /home/knakaj/.config/libreoffice/4/user/uno_packages/cache/log.txtsoffice.b 23289 knakaj 26uW REG 0,47 127 772 /home/knakaj/.config/libreoffice/4/user/extensions/bundled/extensions.pmapdbus-daem 23304 knakaj cwd DIR 0,47 404 258 /home/knakajat-spi-bu 23305 knakaj cwd DIR 0,47 404 258 /home/knakajat-spi-bu 23305 knakaj mem REG 0,47 787 825 /home/knakaj/.config/dconf/userdbus-daem 23310 knakaj cwd DIR 0,47 404 258 /home/knakajat-spi2-r 23312 knakaj cwd DIR 0,47 404 258 /home/knakajgvfsd 23318 knakaj cwd DIR 0,47 404 258 /home/knakajgvfsd-fus 23323 knakaj cwd DIR 0,47 404 258 /home/knakaj
-a 全部、-u ユーザID、-v 詳細モード
opensuse151:~ # fuser -avu /home/knakaj/test/test.odtUSER PID ACCESS COMMAND/home/knakaj/test/test.odt:knakaj 23289 F.... (knakaj)soffice.bin
-k で kill、 -i で kill の確認メッセージ
opensuse151:~ # fuser -avuki /home/knakaj/test/test.odtUSER PID ACCESS COMMAND/home/knakaj/test/test.odt:knakaj 23289 F.... (knakaj)soffice.binKill process 23289 ? (y/N) yopensuse151:~ #
-m でマウントオプション
opensuse151:~ # fuser -mauv /mnt/sdcUSER PID ACCESS COMMAND/mnt/sdc: root kernel mount (root)/mnt/sdcknakaj 22618 f.c.. (knakaj)smbdopensuse151:~ #
-m と ki オプションでモンダイの smb プロセスを kill する。
opensuse151:~ # fuser -mauvki /mnt/sdcUSER PID ACCESS COMMAND/mnt/sdc: root kernel mount (root)/mnt/sdcknakaj 21867 f.c.. (knakaj)smbdKill process 21867 ? (y/N) y
セッションが kill され、開いているファイルがリセットされました。ディレクトリに cd している場合は bash がディレクトリファイルをオープンしています。よくある話。
opensuse151:/home/knakaj # fuser -vau .USER PID ACCESS COMMAND/home/knakaj: root 22884 ..c.. (root)bashroot 22982 ..c.. (root)fuseropensuse151:/home/knakaj #opensuse151:/home/knakaj # fuser -vau /home/knakaj/USER PID ACCESS COMMAND/home/knakaj: root 22884 ..c.. (root)bashroot 23149 ..c.. (root)fuseropensuse151:/home/knakaj # cd ..opensuse151:/home # fuser -vau /home/knakaj/USER PID ACCESS COMMAND/home/knakaj:opensuse151:/home #※ ちなみに bash のプロセスを kill するとそのターミナルは固まります......