1. 程式人生 > >如何一個命令停止某個埠的服務程序-Linux

如何一個命令停止某個埠的服務程序-Linux

我們先看看這麼做的過程,把處理方式整理一下,然後才能用程式處理: 

1 netstat -nlp 檢視佔用埠號的服務 
2 找到該埠號的程序 
3 找到該程序id 
4 kill它 

程式可以一點一點來: 

1 檢視佔用埠號的服務 

[email protected] root]# netstat -nlp 
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:3306            0.0.0.0:*               LISTEN      23946/               
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      12711/               
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3936/httpd          
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      3910/               
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3753/sshd          
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      3786/               
Active UNIX domain sockets (only servers) 
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path 
unix  2      [ ACC ]     STREAM     LISTENING     827412 23946/              /tmp/mysql.sock 
unix  2      [ ACC ]     STREAM     LISTENING     733272 12711/              ./mysql.sock 

(省掉了一些內容) 

2 可以用grep篩選一下,看看規律,找到有 :3306 的一行就好 
用管道符給grep處理: 

[email protected] root]# netstat -nlp | grep :3306 
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      23946/ 


既然取出一行了,那就容易了,再篩選一下,用awk分割取出其中一個 

3 讀取出埠號 

[email protected] root]# netstat -nlp | grep :3306 | awk '{print $7}' 
23946/ 


意思是取第七個欄位,這裡預設應該是用tab字元分割的,已經讀取出來了,但是還得拿到/前面的數字 

4 取/前面的數字就可以了,這裡還是可以用awk處理 

[email protected] root]# netstat -nlp | grep :3306 | awk '{print $7}' | awk -F"/" '{ print $1 }' 
23946 


意思是用/符號分割,取第一部分 

5 然後把這個數字傳給kill就可以 

kill命令不能跟在管道符後面繼續處理了,會出錯的 

[email protected]
 root]# netstat -nlp | grep :3306 | awk '{print $7}' | awk -F"/" '{ print $1 }' | kill 
kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec] 


需要用到"`"操作符,它可以執行一個語句,這個可以如此執行: 

kill `netstat -nlp | grep :3306 | awk '{print $7}' | awk -F"/" '{ print $1 }'` 

好了,任務完成了,之後貼一下awk的介紹,挺使用的 
當然,有更加精簡的寫法,這裡只是描述思路的實現