Julia交互式REPL中脚本未完全退出致端口占用的问题
解决Julia HTTP/WS服务器Ctrl+C后端口占用问题
问题背景
通过julia --project启动REPL,执行include("scripts/main.jl")启动HTTP和WS服务器,按下Ctrl+C返回REPL后,再次运行脚本提示端口已被占用,原因是服务器进程未完全退出。
解决方案
1. 给脚本添加中断信号处理逻辑
修改scripts/main.jl,显式监听SIGINT信号(即Ctrl+C触发的中断),在收到信号时主动关闭服务器实例:
using HTTP, WebSockets # 替换为你实际的服务器启动代码 http_server = HTTP.serve!(your_handler, "0.0.0.0", 8080) ws_server = WebSockets.Server(your_ws_handler, "0.0.0.0", 8081) # 定义中断处理函数 function shutdown_server(signal) println("正在关闭服务器...") close(http_server) close(ws_server) exit() end # 注册信号监听 signal(SIGINT, shutdown_server) # 阻塞主线程,避免脚本直接退出 wait()
2. 手动清理占用端口的进程
如果已经出现端口占用,先定位占用端口的进程:
# Linux/macOS系统 lsof -i :<你的端口号> # Windows系统 netstat -ano | findstr :<你的端口号>
根据输出的PID杀死进程:
# Linux/macOS kill <PID> # Windows taskkill /PID <PID> /F
3. 启动服务器时启用端口复用
在HTTP服务器启动参数中添加reuseaddr=true,允许端口被复用,即使之前的进程未完全释放端口:
HTTP.serve!(your_handler, "0.0.0.0", 8080; reuseaddr=true)
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

