cmd并行执行和终止

时间:2015-05-23 10:45:27

标签: windows bash cmd

我有以下bash脚本:

node ./build.js & node ./server.js

它创建两个nodejs进程并并行执行它们。当我按Ctrl-C时,两个进程都会终止。

我尝试对Windows cmd shell执行相同的操作。这就是我目前所拥有的:

start /B node ./build.js & node ./server.js

它成功启动了相同的两个进程,但是在我按下Ctrl-C之后它只会杀死第二个进程; node ./build.js保持活动状态,我没有简单的方法从控制台终止它。

可悲的是,PowerShell不是一个选项,因为这些脚本应该作为npm脚本的一部分运行,并且它只能使用cmd作为Windows shell。

2 个答案:

答案 0 :(得分:4)

即使您无法直接从节点运行PowerShell命令,只要您可以运行cmd命令,您就可以使用powershell.exe执行任何操作。实质上:

powershell -Command "Get-Item ."

现在,到实际解决方案:

powershell -Command "Start-Process -NoNewWindow node .\server1.js; Start-Process -NoNewWindow node .\server2.js"

上面的命令应该启动server1和server2,Ctrl + C或等效命令将终止两个子进程。

答案 1 :(得分:1)

从npm脚本运行多个进程的跨平台解决方案(Win,Linux,Mac)是安装parallelshell npm库。

npm install parallelshell --save-dev

然后在package.json文件中,您可以按如下方式定义脚本:

"scripts": {
  "myScript" : "parallelshell \"node ./build.js\" \"node ./server.js\""    
}

执行npm run myScript。甚至更快 - 调用脚本start而不是myScript并执行npm start

注意 - Windows无法识别单引号,因此脚本中的双引号被转义。