“如何查看80端口被哪个进程占用了?Linux运维必备技巧解析”

   360SEO    

在Linux系统中,我们经常需要查看某个端口被哪个进程占用,特别是在排查网络问题和系统故障时,这是非常有用的技能。下面介绍4种查看80端口被哪个进程占用的方法,适用于各种Linux系统。

1. 使用lsof命令

lsof(list open files)是一个列出当前系统打开文件的工具,我们可以使用它来查看哪些进程正在使用某个端口。要查看80端口被哪个进程占用,可以使用以下命令:

sudo lsof -i :80

执行该命令后,你将看到类似以下的输出:

COMMAND  PID    USER   FD   TYPE  DEVICE SIZE/OFF NODE     NAME
nginx   12345  wwwdata 7u   IPv4  12345  0t0     TCP *:http (LISTEN)
nginx   12346  wwwdata 7u   IPv4  12346  0t0     TCP *:http (LISTEN)

从输出中可以看出,有两个名为nginx的进程正在监听80端口,PID为12345的进程是主进程,PID为12346的进程是工作进程。

2. 使用netstat命令

netstat(network statistics)是一个显示网络状态的命令,我们可以使用它来查看哪些进程正在使用某个端口。要查看80端口被哪个进程占用,可以使用以下命令:

sudo netstat -tuln | grep :80

执行该命令后,你将看到类似以下的输出:

tcp  0    0 0.0.0.0:80      0.0.0.0:*      LISTEN      12345/nginx
tcp  0    0 0.0.0.0:80      0.0.0.0:*      LISTEN      12346/nginx

从输出中可以看出,有两个名为nginx的进程正在监听80端口,PID为12345的进程是主进程,PID为12346的进程是工作进程。

3. 使用ss命令

ss(socket statistics)是一个显示套接字统计信息的命令,我们可以使用它来查看哪些进程正在使用某个端口。要查看80端口被哪个进程占用,可以使用以下命令:

sudo ss -tuln | grep :80

执行该命令后,你将看到类似以下的输出:

LISTEN 0 128 *:80 *:* users:(("nginx",pid=12345,fd=7),("nginx",pid=12346,fd=7))

从输出中可以看出,有两个名为nginx的进程正在监听80端口,PID为12345的进程是主进程,PID为12346的进程是工作进程。

4. 使用top命令

top命令可以实时显示系统中各个进程的资源占用情况,我们可以使用它来查看哪些进程正在使用某个端口。要查看80端口被哪个进程占用,可以在终端中输入top命令,然后按下Shift + F9键,切换到“内存”视图,接着按下Shift + F7键,切换到“按CPU使用率排序”视图,最后按下Shift + F8键,切换到“按内存使用率排序”视图,此时,你将看到类似以下的输出:

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
12345 wwwdata  20  0  12345   7896   6564 S  0.3  0.1   0:15.69 httpd
12346 wwwdata  20  0  12346   7896   6564 S  0.3  0.1   0:15.69 httpd
1     root      20  0      0      0      0 S  0.0  0.0   0:01.29 systemd-journal
1     root      20  0      0      0      0 S  0.0  0.0   0:03.75 kthreadd
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

从输出中可以看出,有两个名为httpd的进程正在监听80端口,PID为12345的进程是主进程,PID为12346的进程是工作进程,这两个进程可能是Nginx服务器的组件。

问题与解答

问题1:为什么在lsof命令的输出中,有的主进程的PID比工作进程的PID小?

解答:这可能是因为主进程在启动时创建了工作进程,所以它的PID会比工作进程小,但这并不影响它们之间的关联关系,我们可以通过查看其他信息(如COMMAND列)来判断它们之间的关系。

问题2:为什么在netstat和ss命令的输出中,没有显示进程的名称?

解答:这是因为这些命令默认不显示进程的名称,如果需要显示进程的名称,可以使用p选项或者结合grep命令来实现,例如:

sudo netstat -tulnp | grep ':80'
sudo ss -tulnp | grep ':80'

问题3:为什么在top命令的输出中,有些进程的名称是数字?

解答:这是因为有些进程的名称太长,无法完全显示在终端中,所以top命令会显示它们的PID。如果需要查看进程的全名,可以在top命令中按下c键。

以上就是在Linux系统中查看80端口被哪个进程占用的4种方法,可以根据需求选择合适的命令进行使用。

推荐的相关问题:

  • 如何停止80端口的进程?
  • 如何查看端口占用情况?
  • 如何杀死一个进程?

感谢阅读,希望本文对你有所帮助!欢迎留言评论、关注、点赞、分享!

谢谢!

 标签:

评论留言

我要留言

欢迎参与讨论,请在这里发表您的看法、交流您的观点。