linux 快速查詢端口占用程式
阿新 • • 發佈:2019-01-01
工作中經常會遇到端口占用導致服務無法啟動的情況, 這時候通常需要三步來解決問題:
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