解决分区卸载问题
2009-12-01 00:00:00 来源:WEB开发网这更方便,因为它至少指出了进程是什么程序。在通过 fuser 命令获得 PID 信息之后,可以在终止进程之前结合使用标准的 ps 和 egrep 命令了解尽可能详细的相关信息,见 清单 8。
清单 8. 在系统上搜索特定的进程# ps alxww |egrep '23334|23697'
4 1000 23334 23332 20 0 18148 2076 wait Ss pts/13 0:00 -bash
0 1000 23697 23334 20 0 75964 12352 poll_s S+ pts/13 0:00 emacs -nw file2.txt
0 0 23703 23665 20 0 6060 632 - R+ pts/16 0:00 egrep
23334|23697
然后,可以使用标准的 kill 命令手工终止指定的进程,或者像下一节中解释的,使用 fuser 命令的一些高级功能自动地终止它们。
用 fuser 终止进程
在通过参数指定挂载点时,fuser 命令的 -k 选项会自动地终止找到的进程。当然,必须作为根用户执行 fuser 命令,才能终止属于其他用户的进程,见 清单 9。
清单 9. 终止与挂载的 NFS 文件系统相关联的进程# fuser -k /mnt/yellowmachine
/mnt/yellowmachine: 23334c 23697c
Could not kill process 23697: No such process
在这里,第二个进程 (emacs) 是第一个进程 (bash shell) 的子进程,因此在 fuser 命令杀死第一个进程时它就会终止。
如果希望指定底层物理设备名,而不是它包含的文件系统的挂载点,那么还必须指定 -m 选项,见 清单 10。
清单 10. 挂载点和设备的进程列表# fuser -v /opt2
USER PID ACCESS COMMAND
/opt2: wvh 23712 ..c.. bash
wvh 23753 ..c.. emacs
# fuser -v /dev/sdb1
# fuser -vm /dev/sdb1
USER PID ACCESS COMMAND
/dev/sdb1: wvh 23712 ..c.. bash
wvh 23753 ..c.. emacs
第一个命令返回的输出符合预期,因为它引用文件系统的挂载点。第二个命令表明,不能使用标准的 fuser 选项直接查询底层设备。第三个命令说明,-m 选项允许直接指定设备。可以在第一个和第三个命令中添加 -k 选项,从而终止与 /dev/sdb1 设备上的文件系统相关联的进程。
结束语
有时候,为了应对一些紧急情况或者删除挂载的 CD-ROM 或 DVD 等设备,Linux 或 UNIX 系统管理员需要卸载分区。在由于设备忙系统不允许删除它的情况下,检查系统上的所有进程是一个很烦人、很缓慢的过程。lsof 和 fuser 命令有助于识别阻止文件系统卸载的进程。如果情况非常紧急,fuser 命令甚至可以替您终止它们。
更多精彩
赞助商链接