我有一个lerna脚本(lerna dev
),该脚本使用--parallel
选项启动多个软件包的开发服务器(如果我不使用该选项,则只会启动第一个服务,而不会启动其他)。这些服务器通过热重载在不同端口上以开发人员模式为其各自的应用程序提供服务。基本上,这可以使开发顺利进行,因为我们只需输入一个命令即可开始处理多个软件包。
我注意到的问题是,当我中断此lerna任务时,服务器不会关闭。当我运行lerna dev
命令时,它会显示消息,说明服务器已经在其使用的端口上运行。这意味着,当我关闭lerna dev
命令(使用 CTRL + C )时,它不会杀死所有正在运行的进程(有些被杀死了) ,有些不是)。
有趣的是,那些没有关机的是create-react-app projects
。
这是我的问题:如何确保通过lerna run
选项通过--parallel
命令启动的进程与主进程一起被杀死?
PS:这发生在Unix系统上,我们不使用Windows。
答案 0 :(得分:1)
我建议您不要为此使用 ctrl + c 。看看使用Select ChildComp.TreeLevel,
ChildComp.Code,
ISNULL(ChildComp.Specification, '') AS Specification,
dbo.stkCommodities.Code as 'Stock Item Commodity Code',
CASE WHEN ISNULL(dbo.stkCategories.Code,'') = 'SA-NP' THEN 'SA-NP' ELSE '' END AS 'Category Code',
ChildComp.Quantity,
LEFT(ChildComp.Description, CHARINDEX(' -', ChildComp.Description, 1)) as posnr,
stkStockItems.Description as 'Stock Item Description',
ParentComp.Code AS 'Parent Component Code',
CASE WHEN ISNULL(ChildComp.Specification, '') = '' Then ParentComp.Code Else CONCAT(ParentComp.Code, '_', ISNULL(ChildComp.Specification, '')) END AS 'Component Code + Rev'
From dbo.astComponents AS ChildComp
LEFT Join dbo.astAssets ON ChildComp.AssetId = astAssets.Id
LEFT Join dbo.stkStockItems ON ChildComp.Code = stkStockItems.Code
LEFT Join dbo.stkCommodities ON stkStockItems.CommodityId = stkCommodities.Id
LEFT Join dbo.stkCategories ON stkStockItems.CategoryId = stkCategories.Id
LEFT Join dbo.astComponents AS ParentComp ON ChildComp.ParentComponentId = ParentComp.Id
LEFT Join dbo.stkStockItems As ParentItems ON ParentComp.Code = ParentItems.Code
LEFT Join dbo.stkCommodities AS ParentCom ON ParentItems.CommodityId = ParentCom.Id
Where astAssets.Code = '2018010084' AND (dbo.stkCommodities.Code <> 'RM' OR dbo.stkCommodities.Code IS NULL ) AND
(ParentCom.Code <> 'WA' OR ParentCom.Code IS NULL )
或kill
通过pid(进程ID)杀死该进程。
首先,查看正在运行的lerna进程。我的猜测是pkill -f
应该在那里显示您想要的内容(如有必要,请调整grep)。如果这样做,您可能会看到一个主进程(我使用Nginx时就做过,我从未使用过lerna),如果是PID并键入ps aux | grep lerna
,其中PID是您的主PID。如果这不能杀死所有进程,请使用kill PID
杀死与lerna搜索词匹配的所有进程(如果需要,再次进行调整)。
有关如何根据搜索字词终止进程的更多信息,请参见How to kill all processes matching a name
答案 1 :(得分:0)
您可以使用kill-port在NPM脚本中一次杀死所有进程。
您还可以添加一个脚本,该脚本可以杀死端口并运行lerna dev
以确保端口已关闭,并且在服务器启动时不会出现错误。
"scripts": {
"kill-ports": "kill-port --port 4444,5555,3000",
"dev": "npm run kill-ports && lerna run dev --parallel"
}