如何列出运行在不同端口上的所有进程/服务

7
有没有一种命令可以列出正在本地主机上不同端口运行的所有服务?
在我的情况下,当我在一个Angular应用程序上工作时,可能会在localhost:4200上运行它,在一个React应用程序上则是localhost:3000,在一个Redis服务器上则是localhost:6379等等。
有没有办法知道这些服务是否在运行,以及如何杀死/停止它们?

你试过用谷歌搜索吗?它会直接列出像https://superuser.com/questions/529830/get-a-list-of-open-ports-in-linux这样的东西。 - Nico Haase
我搜索了一段时间,我认为我错过了关键词“开放端口”。 - Ramesh Reddy
4个回答

9

你正在使用哪个操作系统?答案可能因操作系统类型而异,包括不同的发行版。

例如,在一些Linux发行版上,我更愿意使用ss -nltp命令。

示例:

$ ss -nltp
State      Recv-Q Send-Q   Local Address:Port          Peer Address:Port
LISTEN     0      128                  *:22                       *:*   
LISTEN     0      10           127.0.0.1:25                       *:*   
LISTEN     0      128                 :::111                     :::*   
LISTEN     0      50                  :::8080                    :::*   
LISTEN     0      128                 :::22                      :::*   

解释:

-n, --numeric 不解析服务名称 (google.com --> 1.2.3.4)

-l, --listening 显示正在监听的套接字 (仅显示你正在监听的端口)

-p, --processes 显示使用套接字的进程 (包括锁定套接字的子进程)

-t, --tcp 仅显示TCP套接字

更通用的命令是netstat

示例:$ netstat -nl

请查看ss的手册获取更多信息。


编辑:由于您说您正在使用Windows,您可以使用以下命令列出所有相关进程(-n == 数字,-a == 所有,-o == 显示进程ID,-p TCP == 仅显示TCP):

netstat -nao -p TCP

最后一列将是进程ID,您可以使用taskkill 来终止该进程:

taskkill /F /PID <PID>

其中/F表示强制终止,/PID表示下一个值是进程ID。


以下命令可以让你通过进程名称或端口号选择进程,并向它们发送 SIGTERM 信号:kill $(ss -nap | fzf | grep -oP 'pid=\K[^,]+') - Matthias Braun

1
您可以使用批处理(cmd.exe)来完成此任务。
::List processes
@Tasklist.exe

::List services
Sc.exe Query Type= service

::Stop a process 
Taskkill.exe /im "Image name of a task.exe"


::Stop a service
@%__APPDIR__%Net.exe Stop "Service name"

::Start a service
@%__APPDIR__%Net.exe Start "Service name"

执行这些批处理文件的方法:

  • 打开记事本并复制其中一个指定任务的代码。
  • 将其另存为扩展名为 .bat 的文件。
  • 打开 cmd.exe 并将批处理文件拖放到其中,然后执行它。

像MikNiller的回答那样使用一个简单的命令似乎更好。使用这种方法会有什么不同的结果吗? - Ramesh Reddy

1
在Windows中,使用netstat -nba | FINDSTR "LISTEN"获取在端口上监听的进程(Pids)列表。
如果您需要查找特定端口,则可以将其通过findstr管道两次 netstat -nba | FINDSTR "LISTEN" | FINDSTR "3000" 在PowerShell中,您可以使用Stop-Process CMDlet和Id选项停止进程。
Stop-Process -Id 1234

如果您想在一个PowerShell命令中完成所有操作,可以使用以下命令:
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force

or

Stop-Process -Id (Get-NetTCPConnection -LocalPort 6379).OwningProcess -Force

对于Redis


这对我没用。它什么也没做。 - Ramesh Reddy
在Windows上呢?只用netstat -ba命令行怎么样? - MikNiller
1
是的,必须是管理员。 - MikNiller
如何获取进程的名称或其他详细信息以及它们所使用的端口? - Ramesh Reddy
1
你可以通过 Get-Process -Id (Get-NetTCPConnection -LocalPort 6379).OwningProcess 获取更多信息。 - MikNiller

0

尝试以下命令:

sudo netstat -ltnp

以上命令基于以下功能提供netstat信息:
l: display only listening sockets 
t: display tcp connection 
n: display addresses in a numerical form 
p: display process ID/ Program name

你的输出应该类似于:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1784/sshd       
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      9031/cupsd      
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      1504/beam.smp   
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1798/postgres   
tcp        0      0 0.0.0.0:7070            0.0.0.0:*               LISTEN      1245/anydesk    
tcp        0      0 0.0.0.0:70              0.0.0.0:*               LISTEN      1803/nginx -g daemo
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      1504/beam.smp   
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      1476/mongod     
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1739/mysqld     
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      1683/redis-server 1
tcp        0      0 127.0.0.1:33485         0.0.0.0:*               LISTEN      5582/chrome --type=
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN      1736/epmd       
tcp        0      0 127.0.0.1:5939          0.0.0.0:*               LISTEN      2435/teamviewerd
tcp        0      0 127.0.0.1:21460         0.0.0.0:*               LISTEN      15337/node      
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      4671/dnsmasq    
tcp6       0      0 :::22                   :::*                    LISTEN      1784/sshd       
tcp6       0      0 ::1:631                 :::*                    LISTEN      9031/cupsd      
tcp6       0      0 127.0.0.1:5563          :::*                    LISTEN      15337/node      
tcp6       0      0 :::5672                 :::*                    LISTEN      1504/beam.smp   
tcp6       0      0 :::80                   :::*                    LISTEN      2532/apache2    
tcp6       0      0 :::4369                 :::*                    LISTEN      1736/epmd     

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接