有時候我們需要umount某個掛載目錄時會遇到如下問題:
1
2
|
[root@localhost
/]# umount /data/ umount.nfs:
/data: device is busy |
通過這條命令查看:
1
2
3
4
|
[root@localhost
/]# fuser -m -v /data/ 用戶
進程號 權限 命令 /data/:
root 2798 ..c.. bash root
2996 ..c.. su |
-v 表示 verbose 模式。進程以 ps 的方式顯示,包括 PID、USER、COMMAND、ACCESS 字段
-m 表示指定文件所在的文件系統或者塊設備(處於 mount 狀態)。所有訪問該文件系統的進程都被列出。
如上所示,有兩個進程佔用了,將其kill掉,再重新取消掛載。
1
2
3
4
|
[root@localhost
/]# kill -9 2798 [root@localhost
/]# kill -9 2996 [root@localhost
/]# umount /data/ [root@localhost
/]# |
成功!
fuser 概述
fuser命令是用來顯示所有正在使用着指定的file, file system 或者 sockets的進程信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@gc-statis2
]# fuser -m -v tests/ 用戶
進程號 權限 命令 tests/:
root 7300 F.ce. php-fpm www
7301 ..ce. php-fpm www
7302 ..ce. php-fpm www
7303 ..ce. php-fpm www
7304 ..ce. php-fpm www
7305 ..ce. php-fpm www
7306 ..ce. php-fpm www
7307 ..ce. php-fpm www
7308 ..ce. php-fpm www
7309 ..ce. php-fpm root
18891 ..c.. bash |
同時fuser 可以用來查找哪些進程正在使用指定的端口(network port).
1
2
3
4
|
[root@gc-statis2
]# fuser -v -n tcp 80 用戶
進程號 權限 命令 80/tcp:
root 7975 F.... nginx www
7976 F.... nginx |
fuser 常用場景
fuser通常被用在診斷系統的“resource busy”問題,通常是在你希望umount指定的掛載點得時候遇到。 如果你希望kill所有正在使用某一指定的file, file system or sockets的進程的時候,你可以使用-k option。
1
|
fuser
–k /path/to/your/filename |
這時fuser會向所以正在使用/path/to/your/filename的進程發送SIGKILL。如果你希望在發送之前得到提示,可以使用-i 選項。
1
|
fuser
–k –i /path/to/your/filename |