不能使用lsof之类工具找出访问磁盘的进程,要求使用linux api找出所用访问磁盘的进程,并kill。
fuser -ki <磁盘阵列的挂载点>
fuser是专门用来作这方面的工作的。如果有使用磁盘阵列的程序,可以将其杀死,但是,为了谨防万一使用 -i 参数,来提示一下,是否真的杀死这个进程.
我自己想了下,linux应该是没有原生API可以实现的,至于lsof和上面的fuser之类的实现原理,应该是遍历/proc/下面所有pid的fd目录,该目录下的连接文件的路径匹配磁盘路径,说明该进程占用了磁盘。举例:
~ # ls -l /proc/$pid/fd/
lr-x------ 1 root root 64 Dec 31 09:23 0 -> /dev/null
lrwx------ 1 root root 64 Dec 31 09:23 1 -> /dev/console
lrwx------ 1 root root 64 Dec 31 09:23 2 -> /dev/console
l-wx------ 1 root root 64 Dec 31 09:23 3 -> /media/sdcard/xx