zoukankan      html  css  js  c++  java
  • lsof 与fuser

    服务器上调试程序时,有时会遇到所需资源被占用的情况,这时就要查一下是什么程序占用了资源。需要用到lsof与fuser指令。

    lsof用于显示打开文件的信息

    lsof  filename 显示打开指定文件的所有进程
    lsof -a 表示两个参数都必须满足时才显示结果
    lsof -c string   显示COMMAND列中包含指定字符的进程所有打开的文件
    lsof -u username  显示所属user进程打开的文件
    lsof -g gid 显示归属gid的进程情况
    lsof +d /DIR/ 显示目录下被进程打开的文件
    lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长l

    例如

    vigar@vigar-laptop:~/下载/nice$ lsof /opt/google/chrome/chrome
    COMMAND  PID  USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME
    chrome  4913 vigar txt    REG    8,6 68449288 1835017 /opt/google/chrome/chrome
    chrome  4917 vigar txt    REG    8,6 68449288 1835017 /opt/google/chrome/chrome
    chrome  4919 vigar txt    REG    8,6 68449288 1835017 /opt/google/chrome/chrome

    lsof查特定端口

    hpcentos5-/opt/test/bin> lsof -itcp:5000
    COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    perl    8587 admin    3u  IPv4 510003      0t0  TCP hpcentos5:commplex-main (LISTEN)

    fuser 的作用与lsof非常相似,也会将使用指定文件的进程信息全部列出

    vigar@vigar-laptop:~/下载/nice$ fuser -v /opt/google/chrome/chrome
                         用户     进程号 权限   命令
    /opt/google/chrome/chrome:
                         vigar      4913 ...e. chrome
                         vigar      4917 ...e. chrome
                         vigar      4919 ...e. chrome

         权限含义:

       c 将此文件作为当前目录使用。 
          e 将此文件作为程序的可执行对象使用。 
          r 将此文件作为根目录使用。 
          s 将此文件作为共享库(或其他可装载对象)使用

     

       fuser另一个非常有用的功能是-k,可以杀死指定进程(发SIGKILL信号)  

    vigar@vigar-laptop:~/下载/nice$ fuser aaa.avi
    aaa.avi:             14097
    vigar@vigar-laptop:~/下载/nice$ fuser -k aaa.avi
    aaa.avi:             14097
    vigar@vigar-laptop:~/下载/nice$ fuser aaa.avi
    vigar@vigar-laptop:~/下载/nice$ 
    可知占用aaa.avi的进程已经被干掉。当然,执行这条指令需要足够的权限,有root权限最好,其它人是无法杀死别人的进程的。

     当利用lsof或fuser查出指定进程号后,即可用netstat -anp | grep pid查出其开放端口

    test> netstat -anp | grep 7172
    (Not all processes could be identified, non-owned process info
    tcp        0      0 :::8777                     :::*                        LISTEN      7172/java           
    tcp        0      0 ::ffff:10.0.7.128:23564     ::ffff:10.0.3.103:1521      ESTABLISHED 7172/java           
    tcp        0      0 ::ffff:10.0.7.128:23550     ::ffff:10.0.3.103:1521      ESTABLISHED 7172/java           
    tcp        0      0 ::ffff:10.0.7.128:10629     ::ffff:10.0.3.91:1414       ESTABLISHED 7172/java           
    tcp        0      0 ::ffff:10.0.7.128:23562     ::ffff:10.0.3.103:1521      ESTABLISHED 7172/java           
    tcp        0      0 ::ffff:10.0.7.128:23572     ::ffff:10.0.3.103:1521      ESTABLISHED 7172/java           

     有时在机器上查出某个进程在跑,却不知道程序部署在何处,可以用ps -ef 查出pid,用lsof| grep pid,根据得到的信息推断出程序位置

  • 相关阅读:
    大数据是否有可能有效配置资源?
    在大数据时代,我们需要数据售货员
    在大数据时代,我们需要数据售货员
    粗糙的贝叶斯转化概率预测模型
    粗糙的贝叶斯转化概率预测模型
    MVC中的ViewData、ViewBag和TempData
    58被微信玩弄,你知道吗?
    你的以太网速度足够快吗?四种更快的速度正在路上······
    hibernate预编译SQL语句中的setParameter和setParameterList
    创建单线性链表的不同表示方法和操作
  • 原文地址:https://www.cnblogs.com/vigarbuaa/p/2776565.html
Copyright © 2011-2022 走看看