Powershell停止进程不会杀死Logstash

时间:2017-07-19 19:41:56

标签: powershell process logstash

我正在编写一个powershell脚本,允许Logstash运行一段时间,然后按进程ID停止程序。以下是代码的基本版本:

$logstashFilepath = "C:\Users\emckenzie\Downloads\logstash-5.3.2\logstash-5.3.2\bin\logstash.bat"
$logstashArguments = "-f C:\users\emckenzie\Downloads\logstash-5.3.2\logstash-5.3.2\test_loader.conf"

$logstashprocess = Start-Process -FilePath $logstashFilepath -ArgumentList $logstashArguments -PassThru
$logstashid = $logstashprocess.Id

Write-Host $logstashid

Start-Sleep -s 60

Stop-Process $logstashid

在此测试用例中,Logstash仅从stdin写入stdout。当我运行此程序时,输出如下所示:

17120
Stop-Process : Cannot find a process with the process identifier 17120.
At C:\Users\emckenzie\Documents\Loaders\testLoader.ps1:13 char:13
+ Stop-Process <<<<  $logstashid
+ CategoryInfo          : ObjectNotFound: (17120:Int32) [Stop-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenId,Microsoft.PowerShell.Commands.StopProcessCommand

这是Logstash或Powershell中的问题吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

我最终使用NSSM来启动Logstash作为服务,我通过Powershell控制NSSM。

Join/Where

答案 1 :(得分:0)

阅读原帖后的评论后,我相信有一个解决方案。如果您知道正在运行的程序需要保持运行,直到作业完成:

$logstashprocess = Start-Process -FilePath $logstashFilepath -ArgumentList $logstashArguments -PassThru
$logstashid = $logstashprocess.Id

$Global:IsRunning = $false

Do {
    $process = Get-Process -processname "NameOfProcessHere"
    If ($process){
        $IsRunning = $true
    }else{
        $IsRunning = $false
    }
} While ($IsRunning -eq $true)

Stop-Process -processname "$logstashid"

如果这有用,或者我不理解这个问题,请告诉我。