如何获取本地运行中REPL的nREPL端口号?
查找本地REPL运行端口的方法
一、Shell命令方式
Linux/macOS
- 直接查找Clojure进程关联的端口:
lsof -i -P -n | grep clojure
输出中LISTEN状态对应的数字就是REPL监听的端口(例如*:5555 (LISTEN)里的5555)。
- 若进程名不显示为clojure,可查找Java进程(Clojure基于JVM运行):
lsof -i -P -n | grep java
从结果里筛选LISTEN状态的端口,结合启动时间判断目标端口。
Windows(PowerShell)
- 查找Clojure进程的端口:
$clojureProc = Get-Process | Where-Object { $_.ProcessName -like "*clojure*" } Get-NetTCPConnection | Where-Object { $_.OwningProcess -eq $clojureProc.Id } | Select-Object LocalPort
- 查找Java进程的监听端口:
Get-Process java | ForEach-Object { Get-NetTCPConnection -OwningProcess $_.Id } | Where-Object { $_.State -eq "Listen" } | Select-Object LocalPort
二、Clojure函数方式
如果能在REPL内部执行代码(比如VS Code仍可访问REPL),用以下方法:
针对Leiningen启动的nREPL
直接读取内置属性:
(System/getProperty "nrepl.port")
执行后直接返回端口号字符串。
通用JVM端口查询
通过JVM管理API获取启动参数中的端口:
(->> (java.lang.management.ManagementFactory/getRuntimeMXBean) .getInputArguments (filter #(re-find #"port=(\d+)" %)) first (re-find #"port=(\d+)") second)
nREPL内部获取当前端口
如果当前在nREPL会话里,直接获取服务器实例的端口:
(-> @(resolve 'nrepl.server/*server*) :server-socket .getLocalPort)
内容的提问来源于stack exchange,提问作者Clarice Bouwer
相关产品推荐
相关产品推荐

