Linux fuser工具使用方法介绍

地址: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后跟的字符说明了进程以何种方式与该目录/文件关联,有以下关联方式:

   指示进程的工作目录

  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

 -n获取某一端口的进程信息 henmap组合时尤其有用。。。。

另外,针对某文件系统的使用者,我们可以使用-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查询并关闭使用相应文件系统的进程。

 

本文翻译自 5 Practical Linux fuser Command Examples

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值