您的位置:首页 > 运维架构 > Linux

Linux fuser工具使用方法介绍

2014-01-21 10:22 615 查看
http://www.cnblogs.com/bangerlee/articles/2460614.html


引言
fuser是linux中较常用的工具,"fuser"——从其名称我们可以看出该工具的用途:查询给定文件或目录的用户或进程信息。

除查询文件相关信息之外,使用fuser还能向进程发送SIGKILL等信号,完成强制让进程退出的功能,下面我们就来看fuser工具的具体使用方法。

以上命令查询了/root目录被哪些进程使用,输出包含进程的PID以及字符’c’。字符’c’指示了进程的工作目录,使用以下命令可进行验证:

查询文件和目录使用者

fuser最基本的用法是查询某个文件或目录被哪个进程使用:

# fuser /root/root:               17923c 24869c


以上命令查询了/root目录被哪些进程使用,输出包含进程的PID以及字符’c’。字符’c’指示了进程的工作目录,使用以下命令可进行验证:

# ls -l /proc/17923/cwdlrwxrwxrwx 1 root root 0 Apr 19 09:02 /proc/17923/cwd -> /root


PID后跟的字符说明了进程以何种方式与该目录/文件关联,有以下关联方式:
  c 指示进程的工作目录
  e 指示该文件为进程的可执行文件(即进程由该文件拉起)
  f 指示该文件被进程打开,默认情况下f字符不显示
  F 指示该文件被进程打开进行写入,默认情况下F字符不显示
  r 指示该目录为进程的根目录
  m 指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存

使用-v选项将显示更全的信息:

# fuser -v /root            USER     PID    ACCESS   COMMAND/root:      root    17923    ..c..      bash            root    24869    ..c..      atop


下面我们使用一个端口监听的例子,来看可执行文件、socket端口使用进程的信息查询。

# ./socket &


以上socket程序是一个使用C编写的小程序,起一个TCP服务端,监听9999端口,代码请查附件。

执行完该程序时候,我们使用fuser进行查询:

# fuser -v socket             USER    PID   ACCESS   COMMANDsocket:    root    11861    ...e.   socket


可以看到PID为11861与socket文件的关联方式为’e’,与上表所列相符。

查询socket和文件系统使用者
除了查询文件、目录的相关使用进程,我们还可以对socket端口的使用者进行查询。还是使用上面socket程序,我们对端口9999进行如下查询:

# fuser -v -n tcp 9999              USER     PID    ACCESS   COMMAND9999/tcp:     root     11861   F....    socket


另外,针对某文件系统的使用者,我们可以使用-m参数进行查询,对于以下分区的系统:

# dfFilesystem           1K-blocks      Used     Available Use%  Mounted on/dev/sda2           15735128   10218084   5517044  65%  /udev                  4091824        168    4091656   1%  /dev/dev/sda3           47550928   43836764   3714164  93%  /home1/dev/sdb2           70627600   64344256   6283344  92%  /home2


执行以下查询命令:

# fuser -m /home1/home1:               2703ce


可以看到/dev/sda3分区的使用者为2703对应的进程,执行fuser –m /dev/sda3、fuser –m /home1/test将得到相同的结果。

使用fuser关闭进程
除了可以使用fuser进行查询之外,fuser还可以向进程发送信号,让进程退出:

# fuser -v -k socket             USER    PID   ACCESS   COMMANDsocket:      root  11861    ...e.    socket [1]+  Killed                  ./socket


-k选项表示向使用socket文件的相关进程发送SIGKILL信号。除了发送SIGKILL信号之外,fuser还可以发送以下信号:

# fuser -l /homeHUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERMSTKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYSUNUSED


另外,加上-i选项,在KILL进程时,需要人为地进行确认:

# fuser -v -k -i socket            USER    PID   ACCESS   COMMANDsocket:     root   11861  ...e.     socketKill process 11861 ?(y/N)


小结
本文介绍了fuser工具的用法,fuser可用于查询文件、目录、socket端口和文件系统的使用进程,并且可以使用fuser关闭进程。
当文件系统umount报device busy时,常用到fuser查询并关闭使用相应文件系统的进程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: