一次中断所有 lerna --并行任务



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

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

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

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

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

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

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

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

我建议你不要为此使用ctrl+c。看看如何使用killpkill -f通过 pid(进程 ID(终止进程。

首先,看看哪些 lerna 进程正在运行。我的猜测是ps aux | grep lerna应该在那里显示您想要的内容(如果需要,请调整 grep(。您可能会看到一个主进程(我在使用 Nginx 时这样做,我从未使用过 lerna(,如果是这样,请获取 PID 并键入kill PID其中 PID 是您的主 PID。如果这不会杀死所有进程,则使用pkill -f lerna来终止与 lerna 搜索词匹配的所有进程(如果需要,再次调整(。

有关如何基于搜索词终止进程的详细信息,请参阅如何终止与名称匹配的所有进程

最新更新