天天看點

Linux - 檢視端口的占用情況、找出并殺死占用程序的方法

本篇博文以 Cent OS 為例, 示範 Linux 系統下如何檢視某個網絡端口的占用情況, 并找出占用某個端口的程序, 以及殺死相關程序的方法.

目錄

  • 1 lsof檢視端口的占用情況
    • 1.1 指令使用示例
      • 1.2 檢視某一端口的占用情況
      • 1.3 殺死某個端口的所有程序
  • 2 netstat檢視端口占用情況
    • 2.1 指令使用示例
    • 2.2 檢視占用某個端口的程序
    • 2.3 殺死某個端口的占用程序
  • 參考資料
  • 版權聲明

# 指令為 lsof -i
[root@onepiece ~]# lsof -i
# 将會顯示 指令 + 程序ID + 程序所屬使用者, 以及監聽的協定、狀态等資訊
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
dhclient    728 root    6u  IPv4   11262      0t0  UDP *:bootpc
ntpd        839  ntp   16u  IPv4   13671      0t0  UDP *:ntp
ntpd        839  ntp   18u  IPv4   13677      0t0  UDP localhost:ntp
           
  • 注意: 若提示無此指令, 則需要安裝, 指令如下:
    [root@onepiece ~]# lsof -i
    -bash: lsof: command not found
    [root@onepiece ~]# yum install -y lsof
    ......
    Installed:
      lsof.x86_64 0:4.87-6.el7
    Complete!
    # 出現上述的 "Complete!",說明安裝成功。
               

# 比如檢視80端口的占用情況,指令為:
[root@onepiece ~]# lsof -i:22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd    3187 root    3u  IPv4   16278      0t0  TCP *:ssh (LISTEN)
sshd    9528 root    3u  IPv4 4436480      0t0  TCP onepiece:ssh->120.253.xx.xx:30214 (ESTABLISHED)
           

這裡顯示出22号端口正被sshd所使用, 狀态是LISTEN(監聽).

不建議通過 kill 的方式解決端口沖突問題!

某些極少的情況下是可以直接殺死程序、釋放端口的, 比如某個 Tomcat 程序沒有成功退出, 導緻重新開機失敗.

# 指令如下:
[root@onepiece ~]# killall sshd
# 這樣,所有sshd的程序都會被結束掉 —— 我這裡通過ssh遠端操作阿裡雲伺服器, 殺死之後将退出連接配接, 提示如下:
Connection to 47.52.xx.xx closed by remote host.
Connection to 47.52.xx.xx closed.
# 此時需要從阿裡雲控制台通過終端進入, 并開啟sshd服務, 指令如下:
service sshd start
           

這樣, 所有與 sshd 的相關程序都會被結束掉 —— 務必慎用.

# 指令示例如下:
[root@onepiece ~]# netstat -anp | grep 22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      9646/sshd
tcp        0     36 172.31.xx.xx:22       120.253.xx.xx:30307     ESTABLISHED 9649/sshd: root@pts
unix  2      [ ]         DGRAM                    15722    476/dbus-daemon
unix  3      [ ]         STREAM     CONNECTED     11122    476/dbus-daemon      
           

可以看出22端口被9646号程序監聽着.

# 指令為fuser:
[root@onepiece ~]# fuser -v -n tcp 22
                     USER        PID ACCESS COMMAND
22/tcp:              root       9646 F.... sshd
                     root       9649 F.... sshd
           

[root@onepiece ~]# kill -s 9 9646(程序号)
           

說明:

-9

參數表示告訴作業系統直接殺死程序, 無論程序的狀态是否可殺死;

該指令隻殺死某個程序, 比

killall

指令相對安全一點.

Linux中如何解除端口占用

linux下如何搜尋一個檔案或程式所在位置

作者: 馬瘦風(https://healchow.com)

出處: 部落格園 馬瘦風的部落格(https://www.cnblogs.com/shoufeng)

感謝閱讀, 如果文章有幫助或啟發到你, 點個[好文要頂👆] 或 [推薦👍] 吧😜

本文版權歸部落客所有, 歡迎轉載, 但 [必須在文章頁面明顯位置标明原文連結], 否則部落客保留追究相關人員法律責任的權利.

繼續閱讀