在 Linux 要檢查那一個進程 (process) 佔用特定埠號, 可以用 netstat 或 lsof 來做, 例如想列出所有開啟的埠號, 可以 netstat 指令:
# netstat -ntlp
假如只想輸出佔用埠號 80 的進程, 可以加上 grep 過濾:
# netstat -ntlp | grep :80
tcp 0 0 :::80 :::* LISTEN 779/httpd
tcp 0 0 :::80 :::* LISTEN 779/httpd
上面可以看到是 httpd 佔用埠號 80, 進程的 pid 是 779
除了用 netstat 外, 也可以用 lsof (List Open Files), losf 是非常實用的系統監控工具, 它可以列出進程開啟的檔案資料, 包括 pipe, socket, 目錄, 裝置等, 所以 lsof 一樣可以檢查埠號佔用進程, 例如檢查佔用埠號 80 指令是這樣:
# lsof -i tcp:80
輪出結果類似這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 779 root 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 786 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 787 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 788 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 789 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 790 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 791 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 792 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 793 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 852 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 853 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 854 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 922 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 925 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 926 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 927 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 928 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 929 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) httpd 930 apache 4u IPv6 30519129 0t0 TCP *:http (LISTEN) |
可以看到佔用埠號 80 的進程是 httpd, 用戶是 root, pid 是 779, 而後面十幾行是 apache 的子進程。