我们先看看这么做的过程,把处理方式整理一下,然后才能用程序处理: 1 netstat -nlp 查看占用端口号的服务 2 找到该端口号的进程 3 找到该进程id 4 kill它 程序可以一点一点来: 1 查看占用端口号的服务 [root@aslibra 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处理: [root@aslibra root]# netstat -nlp | grep :3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 23946/ 既然取出一行了,那就容易了,再筛选一下,用awk分割取出其中一个 3 读取出端口号 [root@aslibra root]# netstat -nlp | grep :3306 | awk '{print $7}' 23946/ 意思是取第七个字段,这里默认应该是用tab字符分割的,已经读取出来了,但是还得拿到/前面的数字 4 取/前面的数字就可以了,这里还是可以用awk处理 [root@aslibra root]# netstat -nlp | grep :3306 | awk '{print $7}' | awk -F"/" '{ print $1 }' 23946 意思是用/符号分割,取第一部分 5 然后把这个数字传给kill就可以 kill命令不能跟在管道符后面继续处理了,会出错的 [root@aslibra 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的介绍,挺使用的 当然,有更加精简的写法,这里只是描述思路的实现 |