如何在 watchman 重建时终止服务器

how to terminate server on watchman rebuild

我的 Makefile 中有一个简单的 watch 目标

watch:
  watchman-make -p '**/*.go' -t run

target run 启动一个网络服务器并绑定到一个端口。文件更改后,执行 run,但出现错误。

bind: address already in use

这是因为之前启动的网络服务器没有终止。 我看到与此相关的线程很少,但没有给出解决方案。

https://github.com/facebook/watchman/issues/246 https://github.com/facebook/watchman/issues/447

watchman 是否可以在每次构建之前终止服务器并释放端口。

watchman 并不能真正直接控制该解决方案,因为它对您的服务器一无所知,因为它听起来像是您在构建结束时将其分叉出来,但应该非常简单:让您的 run目标负责拆除旧的服务器实例。

例如,在您的 Makefile 中:

run: build
      ./stop-running-server
      ./start-server

如何实施 stop-running-server 取决于您。下面列出了一些您可以尝试的常用技术:

  • pkill 杀死名称与您的服务器名称匹配的进程
  • 让您的服务器将其进程 ID 写入文件,然后您可以 kill $(cat pidfile) 执行 stop-running-server