立即中断所有 lerna --parallel 任务

Interrupt all lerna --parallel tasks at once

我有一个 lerna 脚本 (lerna dev),它使用 --parallel 选项启动几个包的开发服务器(如果我没有使用那个选项,只有第一个服务会启动,但是不是其他人)。这些服务器在不同的端口上以开发模式为各自的应用程序提供热重载服务。基本上,这允许顺利开发,因为我们只需要输入一个命令就可以开始处理多个包。

我注意到的问题是,当我中断此 lerna 任务时,服务器不会关闭。当我 运行 我的 lerna dev 命令时,它会打印消息解释服务器已经 运行ning 在他们使用的端口上。这意味着,当我关闭 lerna dev 命令时(使用 CTRL+C),它不会杀死所有这些运行ning 进程(一些被杀死,一些没有)。

有趣的是,那些不关机的是 create-react-app projects

所以这是我的问题:我如何确保通过带有 --parallel 选项的 lerna run 命令启动的进程与主进程一起被杀死?

PS:这种情况发生在Unix系统上,我们不使用Windows。

我建议您不要为此使用 ctrl+c。查看使用 killpkill -f.

通过 pid(进程 ID)终止进程

首先,看看有哪些lerna进程运行。我的猜测是 ps aux | grep lerna 应该显示你想要的东西(如果需要调整 grep)。如果是这样,您可能会看到一个主进程(我在使用 Nginx 时会看到,我从未使用过 lerna),然后输入 PID 并键入 kill PID,其中 PID 是您的主 PID。如果这不能杀死所有进程,请使用 pkill -f lerna 杀死所有匹配 lerna 搜索词的进程(如果需要再次调整)。

有关如何根据搜索词终止进程的详细信息,请参阅 How to kill all processes matching a name

您可以使用 kill-port 在 NPM 脚本中一次终止所有进程。

您还可以添加一个脚本来终止端口并运行 lerna dev 以确保端口已关闭并且在服务器启动时不会出现错误。

"scripts": {
  "kill-ports": "kill-port --port 4444,5555,3000",
  "dev": "npm run kill-ports && lerna run dev --parallel"
}