在使用Linux系统的过程中,有时候会遇到端口被占用而导致服务无法启动的情况。比如HTTP使用80端口,但当启动Apache时,却发现此端口正在使用。
这种情况大多数是由于软件冲突、或者默认端口设置不正确导致的,此时需要查看究竟哪个进程占用了端口,来决定进一步的处理方法。
方式一:
查看端口占用情况的命令:
lsof -i
出现如下结果:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1057 root 3u IPv4 9131 0t0 TCP *:ssh (LISTEN) ntpd 1065 ntp 16u IPv4 9166 0t0 UDP *:ntp ntpd 1065 ntp 17u IPv4 9170 0t0 UDP localhost:ntp ntpd 1065 ntp 18u IPv4 9171 0t0 UDP iZ940p10d47Z:ntp这里返回了Linux当前所有打开端口的占用情况。第一段是进程,最后一列是侦听的协议、侦听的IP与端口号、状态。如果端口号是已知的常用服务(如80、21等),则会直接显示协议名称,如http、ftp、ssh等。
查看某一端口的占用情况:
lsof -i:端口号结果如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME haproxy 5289 root 4u IPv4 1004720 0t0 TCP *:http (LISTEN) AliYunDun 13854 root 30u IPv4 6489263 0t0 TCP 120.76.43.136:46673->140.205.140.205:http (CLOSE_WAIT) AliYunDun 13889 root 12u IPv4 6854001 0t0 TCP 120.76.43.136:53749->140.205.140.205:http (ESTABLISHED) AliYunDun 13889 root 30u IPv4 6489263 0t0 TCP 120.76.43.136:46673->140.205.140.205:http (CLOSE_WAIT) AliHids 19419 root 30u IPv4 3310186 0t0 TCP 120.76.43.136:33228->140.205.140.205:http (CLOSE_WAIT)这里显示出80号端口正在被haproxy使用,状态是listen
结束占用端口的进程:
killall 进程名虽然我们不建议用这种本末倒置的方法来解决冲突问题,但某些情况下还是可以直接结束掉占用进程的(比如重启Apache时进程没有完全退出,导致重启失败)
方式二:
使用命令查看包含指定端口的进程
netstat -apn|grep <端口号>例如:
netstat -apn|grep 80
找到进程号以后,再使用以下命令查看详细信息:
ps -aux|grep <进程号>然后采用kill命令结束进程
kill -9 进程号
感谢您的阅读,希望对您有帮助,本文版权归 #惊讶# 所有