1. 程式人生 > >linux 快速查詢端口占用程式

linux 快速查詢端口占用程式

工作中經常會遇到端口占用導致服務無法啟動的情況, 這時候通常需要三步來解決問題:

1. 找到佔用埠的 程式pid(netstat -tunlp | grep pid)

2. 通過pid 檢視並確定程式(ps aux | grep pid)

3.kill掉該程式,重新啟動服務即可 (kill -9 pid)

示例如下: 

如檢視5140埠的情況,netstat -tunlp |grep 5140

# netstat -tunlp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      4814/rpcbind        
tcp        0      0 0.0.0.0:5908                0.0.0.0:*                   LISTEN      25492/qemu-kvm      
tcp        0      0 0.0.0.0:6996                0.0.0.0:*                   LISTEN      22065/lwfs          
tcp        0      0 192.168.122.1:53            0.0.0.0:*                   LISTEN      38296/dnsmasq       
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      5278/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      5013/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      5962/master         
tcp        0      0 0.0.0.0:8666                0.0.0.0:*                   LISTEN      44868/lwfs          
tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      22065/lwfs      
[[email protected] jar]# netstat -unlp | grep 5140
udp        0      0 0.0.0.0:5140            0.0.0.0:*                           26805/java  

關於幾個引數的含義


 -t (tcp) 僅顯示tcp相關選項
 -u (udp)僅顯示udp相關選項
 -n 拒絕顯示別名,能顯示數字的全部轉化為數字
 -l 僅列出在Listen(監聽)的服務狀態
 -p 顯示建立相關連結的程式名

檢視  程序  

[[email protected]
jar]# ps -aux | grep 26805 root 20678 0.0 0.0 112676 976 pts/0 S+ 12:00 0:00 grep --color=auto 26805 flume 26805 4.5 9.8 29811516 13009992 ? Sl 12月03 117:25 /home/flume/software/java/bin/java -XX:-UseLoopPredicate -XX:CompileCommand=exclude,org.apache.flume.source.kafka.KafkaSourceManager$KafkaConsumerRunnable::run -Xms20g -Xmx20g -XX:MaxDirectMemorySize=512M -XX:+UseG1GC -Dcom.sun.management.jmxremote -Daudit.properties.conf=/home/flume/software/flume-1.6.1.6/bin/../conf/log_audit.properties -Dfield.map.conf=/home/flume/software/flume-1.6.1.6/bin/../conf/field_map.properties -Dflume.root.logger=INFO,LOGFILE -Dflume.kerberos.enabled=true -cp /home/flume/software/flume-1.6.1.6/conf:/home/flume/software/flume-1.6.1.6/lib/*:/home/flume/software/flume-1.6.1.6/plugins.d/elasticSearch-sink/lib/*:/home/flume/software/flume-1.6.1.6/plugins.d/kafka-source/lib/*:/home/flume/software/hadoop-2.7.2.4/etc/hadoop:/home/flume/software/hadoop-2.7.2.4/share/hadoop/common/lib/activation-1.1.jar:/home/flume/software/hadoop-2.7.2.4/share/hadoop/common/lib/apacheds-i18n-2.0.0-M15.jar:/home/flume/software/hadoop-2.7.2.4/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/home/flume/software/hadoop-2.7.2.4/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/home/flume/software/hadoop-2.。。。。。。。。。。。。。。。。。。。。。。。。。。

最後kill該程序即可

[[email protected] ~]# kill -9 20893

 

貼一個監測端口占用的指令碼(來自:http://www.cnblogs.com/wangtao1993/p/6144183.html

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import socket, time, thread
socket.setdefaulttimeout(3) #設定預設超時時間

def socket_port(ip, port):
    """
    輸入IP和埠號,掃描判斷埠是否佔用
    """
    try:
        if port >=65535:
            print u'埠掃描結束'
        s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result=s.connect_ex((ip, port))
        if result==0:
            lock.acquire()
            print ip,u':',port,u'埠已佔用'
            lock.release()
    except:
        print u'埠掃描異常'

def ip_scan(ip):
    """
    輸入IP,掃描IP的0-65534埠情況
    """
    try:
        print u'開始掃描 %s' % ip
        start_time=time.time()
        for i in range(0,65534):
            thread.start_new_thread(socket_port,(ip, int(i)))
        print u'掃描埠完成,總共用時:%.2f' %(time.time()-start_time)
#       raw_input("Press Enter to Exit")
    except:
        print u'掃描ip出錯'

if __name__=='__main__':
    url=raw_input('Input the ip you want to scan: ')
    lock=thread.allocate_lock()
    ip_scan(url)

執行結果如下

# python scan_port.py
Input the ip you want to scan: 20.0.208.112
開始掃描 20.0.208.112
20.0.208.112 : 111 埠已佔用
20.0.208.112 : 22 埠已佔用
20.0.208.112 : 8000 埠已佔用
20.0.208.112 : 15996 埠已佔用
20.0.208.112 : 41734 埠已佔用
掃描埠完成,總共用時:9.38