1.先介紹幾個命令:
1. lsof -i:80
查看80端口的占用情況
命令返回結果:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 46678 xiaoju 7u IPv4 3292095214 0t0 TCP *:http (LISTEN)
2. netstat -lpn | grep 80
查看80端口服務端socket占用狀況
netstat命令介紹見http://man.linuxde.net/netstat,其中注意有-a的時候-l過濾是無效的,所以要加-l就去掉-a。
命令返回結果:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 46678/nginx: worker
3. ll /proc/46778
查看PID為46778的進程服務運行命令的目錄和命令等信息
命令介紹見:https://www.douban.com/note/409387658/
4. pdwx 46778
查看PID=46778的進程的工作目錄.
2. 常見case:
case1: 一台機器上啟動了好多個shop服務,如下,想知道每個服務分別占用什么端口
1
2
3
4
5
|
[xiaoju@rico-
public
order]$ ps -ef |grep shop
xiaoju 15061 1 3 Jun12 ? 07:49:08 ./bin/shop -config=./conf/service.conf.dev.liantiao
xiaoju 17279 1 3 17:54 ? 00:11:43 ./bin/shop -config=./conf/service.conf.dev
xiaoju 19776 1 4 Jun15 ? 06:56:42 /home/xiaoju/shop/output/bin/shop -config=/home/xiaoju/shop/output/conf/service.conf
xiaoju 37919 1 2 Jun15 ? 03:14:06 ./bin/shop -config=/home/xiaoju/shop_8407/output/conf/service.conf.dev.8407
|
解決辦法:
1
2
3
4
5
6
7
|
[xiaoju@rico-
public
order]$ netstat -npl | grep shop
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:8420 0.0.0.0:* LISTEN 17279/./bin/shop
tcp 0 0 0.0.0.0:8401 0.0.0.0:* LISTEN 19776/shop
tcp 0 0 0.0.0.0:8402 0.0.0.0:* LISTEN 15061/./bin/shop
tcp 0 0 0.0.0.0:8407 0.0.0.0:* LISTEN 37919/./bin/shop
|
這樣就知道每個shop服務占用的是哪個端口(netstat最后一列是pid,pid與ps -ef出來的pid一一對應)
1
2
3
|
[xiaoju@rico-
public
order]$ ll /proc/17279
lrwxrwxrwx 1 xiaoju xiaoju 0 Jun 21 22:56 cwd -> /home/xiaoju/shop/output
// 運行路徑
lrwxrwxrwx 1 xiaoju xiaoju 0 Jun 21 22:53 exe -> /home/xiaoju/shop/output/bin/shop
// 可執行文件<br>-r--r--r-- 1 xiaoju xiaoju 0 Jun 21 23:19 cmdline // 運行的命令,這個很重要<br>-r-------- 1 xiaoju xiaoju 0 Jun 21 23:18 environ // 運行時的環境變量<br>
|
這個命令返回很多信息,這里只列了命令運行的路徑和可執行文件路徑。
case2:我想啟動一個服務,服務需要占用8420端口,不知道這個端口有沒有被占用,如占用是被什么程序占用
解決辦法:
1
2
3
|
[xiaoju@rico-
public
order]$ lsof -i:8420
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
shop 17279 xiaoju 10u IPv4 3919976561 0t0 TCP *:8420 (LISTEN)
|
如果這條命令沒有返回任何結果那么表明端口沒被占用,如果返回信息,那么我們就可以看到PID
1
2
3
|
[xiaoju@rico-
public
order]$ ll /proc/17279
lrwxrwxrwx 1 xiaoju xiaoju 0 Jun 21 22:56 cwd -> /home/xiaoju/shop/output
lrwxrwxrwx 1 xiaoju xiaoju 0 Jun 21 22:53 exe -> /home/xiaoju/shop/output/bin/shop<br>-r--r--r-- 1 xiaoju xiaoju 0 Jun 21 23:19 cmdline
|
然后根據PID查到是被什么程序占用。