1. 程式人生 > 其它 >執行umount 的時候卻提示:device is busy 的處理方法

執行umount 的時候卻提示:device is busy 的處理方法

一.解決辦法

umount /mnt/cdrom/
umount: /mnt/cdrom: device is busy.(In some cases useful info about processes that usethe device is found by lsof(8) or fuser(1))

umount /mnt/cdrom/ -f //強制解除安裝也不行

查詢程序號
fuser -m /mnt/cdrom/
/mnt/cdrom/: 1338c

關閉並解除安裝
kill -9 1338
fuser -m /mnt/cdrom
umount /mnt/cdrom/

二.多學知識

一,為什麼要使用fuser?
先說 fuser的作用,fuser能識別出正在對某個檔案或埠訪問的程序
大家想一下,還有哪個命令具備這個功能? 沒錯,是lsof,我們前面講過, lsof能夠找出正在對指定檔案訪問的程序

那麼它們兩者之間有何區別?

fuser有一個特別的用法在於它可以一次殺死那些正在訪問指定檔案的程序。

二,如何使用fuser?

1,如何用fuser得到正在使用指定檔案的程序?
用法: fuser 檔案
說明:它會把正在使用當前檔案的程序id列出

[root@localhost lhd]# umount /
umount: /: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost lhd]# fuser /
/: 1rc 2rc 3rc 4rc 5rc 6rc 7rc 80rc 82rc 84rc 85rc 153rc 157rc 158rc
160rc 165rc 168rc 203rc 204rc 205rc 253rc 441rc 444rc 516rc 521rc 524rc 582rc 583rc
584rc 633rc 1052rc 1392rc 1394rc 1417rc 1597rc 1609rc 1617rc 1620rc 1683rc 1744rc 1783r 1785rc
1788rc 1806r 1808r 1810rc 1811rc 1812rc 1813rc 1814rc 1815rc 1848rc 1886rc 1899rc 1900rc 2001rc
......太多不一一列出

說明:
這些程序號後面的rc是什麼意思?

c 將此檔案作為當前目錄使用。
e 將此檔案作為程式的可執行物件使用。
r 將此檔案作為根目錄使用。
s 將此檔案作為共享庫(或其他可裝載物件)使用

2,如何列出程序的詳細資訊,而不僅僅是程序id?
用 -v引數即可
說明: -v: 含義是:verbose output,詳細的輸出資訊
例子:

[root@dev ~]# fuser /var/log
/var/log: 4196c
[root@dev ~]# fuser -v /var/log

USER PID ACCESS COMMAND
/var/log: root 4196 ..c.. bash

3,如何列出程序所屬的使用者?
用 -u引數即可
說明: -u: 含義:display user IDs,顯示使用者id

例子:
[root@dev ~]# fuser -u /var/log
/var/log: 4196c(root)

4,如何殺死所有正在訪問指定檔案的程序?
用 -k引數即可
說明: -k:含義: kill processes accessing the named file

例子:

[root@localhost lhd]# fuser -v /root/install.log
使用者 程序號 許可權 命令
/root/install.log: root 3185 f.... tail
[root@localhost lhd]# fuser -k /root/install.log
/root/install.log: 3185
[root@localhost lhd]# fuser -v /root/install.log

說明: -k引數能夠殺死所有的正在訪問指定檔案的程序,所以用來殺程序時非常方便
說明之二: fuser如何殺死的程序?
它傳送的是這個訊號:SIGKILL

三,多學一點知識

1,fuser可以列出它所知的訊號:
用 -l引數即可

例子:
[root@dev ~]# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED

2,fuser可以傳送它已知的訊號給訪問的指定檔案程序而代替-k引數預設傳送的SIGKILL
例如:只是掛起程序,那麼傳送HUP訊號就可以了

例子:
[root@localhost lhd]# fuser -v /root/install.log
使用者 程序號 許可權 命令
/root/install.log: root 3347 f.... tail
[root@localhost lhd]# fuser -k -SIGHUP /root/install.log
/root/install.log: 3347
[root@localhost lhd]# fuser -v /root/install.log

本文版權歸作者所有,歡迎轉載,請務必新增原文連結。