按照这个网站:http://os.51cto.com/art/201001/176511.htm和实验指导书配置好nfs后,为了测试nfs,我就把/ 挂载到了/mnt上,结果umount不掉,一直显示device is busy。
百度了一下,有两类方法:(来源:http://www.jb51.net/os/RedHat/1051.html)
1、使用fuser命令
fuser -m -v /mnt 可以查看到当前占用/mnt目录的进程号,然后用kill杀死它。
也可以使用fuser -m -k /mnt 直接杀死这个进程。
如果你不是很明确是否要杀死所有霸占设备的程序,你还可以加一个 -i 参数,这样每杀死一个程序前,都会询问,(如fuser -m -v -i -k /mnt)
-m 参数表明指定的路径是一个挂载点显示所有使用指定文件系统的进程,后面可以跟挂载点,或是dev设备 ( Thanks lisir :),-v 参数给出详细的输出,可以看出,原来是 gqview 这个程序还在霸占着移动设备,fuser 还给出了程序的进程号,知道了进程号,你就可以随便怎么处置这个程序了。
但是我都用了一遍发现没有一个有效果!!而且我显示出来的进程号也不是数字,而是“kernel”。百度后发现kernel进程kill是无法杀死的。。解释如下:
kill -9发送SIGKILL信号将其终止,但是以下两种情况不起作用:
a、该进程处于”Zombie”状态(使用ps命令返回defunct的进程)。此时进程已经释放所有资源,但还未得到其父进程的确认。”Zombie”进程要等到下次重启时才会消失,但它的存在不会影响系统性能。
b、 该进程处于”kernel mode”(核心态)且在等待不可获得的资源。处于核心态的进程忽略所有信号处理,因此对于这些一直处于核心态的进程只能通过重启系统实现。进程在AIX 中会处于两种状态,即用户态和核心态。只有处于用户态的进程才可以用“kill”命令将其终止。
2、使用umount -l。
即 umount -l /mnt
选 项 –l 并不是马上umount,而是在该目录空闲后再umount。还可以先用命令 ps aux 来查看占用设备的程序PID,然后用命令kill来杀死占用设备的进程,这样就umount的非常放心了。