linux根據端口號,或進程名獲取進程pid


  1. 列出誰在使用某個端口

    lsof -i :{port}

    lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。
    [root@localhost webapps]# lsof -i:20880
    COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    java    8624 root  297u  IPv6 14992707      0t0  TCP localhost.localdomain:20880 (LISTEN)
    java    8624 root  316u  IPv6 14990166      0t0  TCP localhost.localdomain:43330->localhost.localdomain:20880 (ESTABLISHED)
    java    8624 root  317u  IPv6 14990167      0t0  TCP localhost.localdomain:20880->localhost.localdomain:43330 (ESTABLISHED)
    java    8624 root  596u  IPv6 14990943      0t0  TCP localhost.localdomain:43386->localhost.localdomain:20880 (ESTABLISHED)
    java    8624 root  597u  IPv6 14990181      0t0  TCP localhost.localdomain:20880->localhost.localdomain:43386 (ESTABLISHED)
    java    8624 root  671u  IPv6 14991724      0t0  TCP localhost.localdomain:43392->localhost.localdomain:20880 (ESTABLISHED)
    java    8624 root  672u  IPv6 14990211      0t0  TCP localhost.localdomain:20880->localhost.localdomain:43392 (ESTABLISHED)
  2. netstat命令,求出進程PID,可進行其他操作,比如殺進程

    netstat -anp|grep {port}|awk '{printf $7}'|cut -d/ -f1

    [root@localhost webapps]# netstat -anp|grep 8080
    tcp6       0      0 :::8080                 :::*                    LISTEN      10027/java          
    [root@localhost webapps]# netstat -anp|grep 8080 |awk '{printf $7}'|cut -d/ -f1
    10027

    netstat -tunlp|grep {port}

    [root@localhost webapps]# netstat -tunlp|grep 8080
    tcp6       0      0 :::8080                 :::*                    LISTEN      10027/java          

     netstat -nlp | grep :{port}| awk '{print $7}' | awk -F"/" '{ print $1 }

    [root@localhost ~]# netstat -nlp | grep :8080
    tcp6       0      0 :::8080                 :::*                    LISTEN      27103/java          
    [root@localhost ~]# netstat -nlp | grep :8080 | awk '{print $7}' 
    27103/java
    [root@localhost ~]# netstat -nlp | grep :8080 | awk '{print $7}' | awk -F"/" '{ print $1 }'
    27103
    [root@localhost ~]# kill -9 $(netstat -nlp | grep :8088 | awk '{print $7}' | awk -F"/" '{ print $1 }') 
  3. 其他命令

    ps命令:  ps -ef | grep {programName}

    [root@localhost ~]# ps -ef | grep tomcat
    root     27103     1  1 11月21 ?      00:21:48 /usr/bin/java -Djava.util.logging.config.file=/usr/local/apache-tomcat-8.0.53/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dspring.profiles.active=test -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /usr/local/apache-tomcat-8.0.53/bin/bootstrap.jar:/usr/local/apache-tomcat-8.0.53/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/apache-tomcat-8.0.53 -Dcatalina.home=/usr/local/apache-tomcat-8.0.53 -Djava.io.tmpdir=/usr/local/apache-tomcat-8.0.53/temp org.apache.catalina.startup.Bootstrap start
    root     29611 29302  0 17:40 pts/0    00:00:00 grep --color=auto tomcat

    pgrep命令(pgrep命令的p表明了這個命令是專門用於進程查詢的grep):

    pgrep {programName}   這個命令不知道為什么不管用,嘖嘖

  4. shell 殺進程

    pid0=$(netstat -nlp | grep :20880 | awk '{print $7}' | awk -F"/" '{ print $1 }');
    # 殺掉對應的進程,如果pid不存在,則不執行
    if [ -n "$pid0" ]; then
    kill -s 9 $pid0;
    fi

     

    另一種根據端口號殺進程的方法,根據更好用

    ps -ef | grep tomcat | grep -v grep | awk '{print $2}' | xargs kill -9
    [root@localhost ~]# lsof -i:20881
    COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    java    27103 root  513u  IPv6 15892971      0t0  TCP localhost.localdomain:20881 (LISTEN)
    java    27103 root  520u  IPv6 15895638      0t0  TCP localhost.localdomain:60750->localhost.localdomain:20881 (ESTABLISHED)
    java    27103 root  521u  IPv6 15891070      0t0  TCP localhost.localdomain:20881->localhost.localdomain:60750 (ESTABLISHED)
    java    27103 root  609u  IPv6 15895639      0t0  TCP localhost.localdomain:60778->localhost.localdomain:20881 (ESTABLISHED)
    java    27103 root  610u  IPv6 15891079      0t0  TCP localhost.localdomain:20881->localhost.localdomain:60778 (ESTABLISHED)
    java    27103 root  756u  IPv6 15891110      0t0  TCP localhost.localdomain:60808->localhost.localdomain:20881 (ESTABLISHED)
    java    27103 root  757u  IPv6 15893007      0t0  TCP localhost.localdomain:20881->localhost.localdomain:60808 (ESTABLISHED)
    [root@localhost ~]# netstat -anp|grep 20881|awk '{printf $7}'|cut -d/ -f1 | xargs kill -9
    [root@localhost ~]# lsof -i:20881
    [root@localhost ~]# netstat -anp|grep 20881|awk '{printf $7}'|cut -d/ -f1 | xargs kill -9
    kill: 找不到進程“---”

 

參考文章鏈接:

  1.   lsof命令具體用法   https://www.cnblogs.com/sparkbj/p/7161669.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM