一次中断所有 lerna --parallel 任务

Posted

技术标签:

【中文标题】一次中断所有 lerna --parallel 任务【英文标题】:Interrupt all lerna --parallel tasks at once 【发布时间】:2019-03-26 08:23:34 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

我建议您不要为此使用 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

【讨论】:

我希望有一个更简单的解决方案,但这会奏效。谢谢!

以上是关于一次中断所有 lerna --parallel 任务的主要内容,如果未能解决你的问题,请参考以下文章

“lerna changed”列出所有包

Lerna bootstrap 不链接本地依赖项?

lerna 使用指南

linux 禁止所有中断

如何在 lerna 中导入本地 git repo?

我可以为 lerna monorepo 中的所有子包管理相同的版本吗?