如果当我们要卸载某个装置时,他老是告诉我们device is busy , 那么到底是那个程序在使用这个装置呢?举例来说,当无法 umount /home时, 该怎么办?此时我们可以使用fuser来帮忙啦!
[[email protected] ~]# fuser [-ki] [-signal] file/dir
参数:
-k :找出使用该档案/目录的PID ,并试图以SIGKILL这个讯号给予该PID;
-i :必须与-k配合,在删除PID之前会先询问使用者意愿!
-signal:例如-1 -15等等,若不加的话,预设是SIGKILL (-9)啰!
范例一:找出目前所在目录的使用PID为何?
[[email protected] ~]# fuser .
.: 18852c
[[email protected] ~]# ps aux | grep 18852
root 18852 0.0 0.4 5396 1588 pts/0 SN 10:12 0:00 bash
用这个方式就可以得到使用该目录的PID了。此外,为何使用fuser的输出当中,在PID后面会有c呢?他代表的意义为:
c:在当前的目录下;
e:可以被执行的;
f:是一个被开启的档案
r:代表root directory
范例二:找到/var底下属于FIFO类型的档案,并且找出存取该档案的程序
[[email protected] ~]# find /var -type p
/var/spool/postfix/public/qmgr
/var/spool/postfix/public/pickup
[[email protected] ~]# fuser /var/spool/postfix/public/qmgr
/var/spool/postfix/public/qmgr: 1666 1675
[[email protected] ~]# ps aux | egrep ‘(1666|1675)‘
root 1666 0.0 0.3 5640 1516 ? Ss Jul25 0:01 /usr/libexec/postfix/master
postfix 1675 0.0 0.4 5744 1604 ? S Jul25 0:00 qmgr -l -t fifo -u
范例三:同范例二,但试图删除该PID?
[[email protected] ~]# fuser -ki /var/spool/postfix/public/qmgr
/var/spool/postfix/public/qmgr: 1666 1675
Kill process 1666 ? (y/N) n
Kill process 1675 ? (y/N) n