我正在使用
Start-Process grunt -ArgumentList 'serve' -PassThru
并将其添加到ArrayList
。当我查看ArrayList
时,它会显示cmd
进程,而不会显示已启动的实际node.js
进程。如果我尝试Stop-Process
,很明显会杀死cmd
进程,而不是正在运行grunt
。我可以找到与grunt
一起运行Get-Process node
。
问题是我需要同时运行多个咕噜声,我想以某种方式区分它们。有什么办法可以在初始化时将实际的node
进程转换为PowerShell吗?
答案 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"