我可以从Start-Process获得实际的grunt流程,而不是CMD流程吗?

时间:2017-01-12 19:52:10

标签: node.js powershell

我正在使用

Start-Process grunt -ArgumentList 'serve' -PassThru

并将其添加到ArrayList。当我查看ArrayList时,它会显示cmd进程,而不会显示已启动的实际node.js进程。如果我尝试Stop-Process,很明显会杀死cmd进程,而不是正在运行grunt。我可以找到与grunt一起运行Get-Process node

问题是我需要同时运行多个咕噜声,我想以某种方式区分它们。有什么办法可以在初始化时将实际的node进程转换为PowerShell吗?

2 个答案:

答案 0 :(得分:2)

这是因为grunt是通过由grunt.cmd运行的CMD启动的。此文件在grunt中启动node

以下是一个如何找到从CMD启动的notepad2.exe的示例,与您的示例类似:

# start a CMD which starts notepad2 and then waits on it
$process = Start-Process -PassThru 'cmd.exe'  '/c "C:\Program Files\Notepad2\Notepad2.exe"'

# Wait for notepad2 to be launched
Start-Sleep -Seconds 2

# find the children of CMD, and kill the one which is notepad2
(Get-CimInstance win32_process -Filter "ParentProcessId='$($process.Id)' AND Name = 'Notepad2.exe'")  | %{ Stop-Process  -Id $_.ProcessId}

为grunt翻译此内容:

# start Grunt via grunt.cmd
$process = Start-Process grunt -ArgumentList 'serve' -PassThru

# Wait for node to be launched
Start-Sleep -Seconds 2

# find the children of CMD, and kill the one which is node
(Get-CimInstance win32_process -Filter "ParentProcessId='$($process.Id)' AND Name = 'node.exe'")  | %{ Stop-Process  -Id $_.ProcessId}

答案 1 :(得分:1)

grunt不是Win32可执行文件,它是node.exe运行的javascript文件。获取运行grunt的节点实例的最简单方法是自己启动它:

$ps = start-process -passthru  node -argumentlist "$env:APPDATA\npm\node_modules\grunt\bin\grunt"