遇到的问题
在我准备rm -rf ./hugo_blog_temp
删除一个目录时候
他提示
rm: cannot remove './hugo_blog_temp/.git/objects/pack/.nfs0000000000019b0d00000004': Device or resource busy
显然是有进程占用了,那么如何定位是什么进程占用并kill这个进程呢?
使用 lsof 查找进程
# 定位正在使用该目录的进程
lsof +D ./hugo_blog_temp
# 或者直接指定被锁定的文件
lsof ./hugo_blog_temp/.git/objects/pack/.nfs0000000000019b0d00000004
然后就会得到类似:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
git 1234 user cwd DIR 0,46 4096 123456 /path/to/hugo_blog_temp
可以用来找占用的端口:
lsof -i:443
得到类似:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
caddy 1103090 caddy 6u IPv6 153681762 0t0 TCP *:https (LISTEN)
caddy 1103090 caddy 8u IPv6 153681763 0t0 UDP *:https
终止进程:
kill -9 1234 # 将 1234 替换为实际 PID
这样即可结束掉占用进程,这个时候就可以rm -rf ./hugo_blog_temp
了
其他方法
使用 fuser 查找进程
# 查看占用文件的进程 PID
fuser -v ./hugo_blog_temp/.git/objects/pack/.nfs0000000000019b0d00000004
# 终止所有占用该文件的进程
fuser -k ./hugo_blog_temp/.git/objects/pack/.nfs0000000000019b0d00000004