我正在监视服务器上的两个进程。当其中一个人去世时,我需要知道它是哪一个。
有没有比我到目前为止检查这个更好的方法?如果没有到目前为止的if / elseif,有没有办法做到这一点?
while ((ps proc1 -ov websrv).Responding -and (ps proc2 -ov connec).Responding)
{ sleep -m 100 }
$pmsname = if (!$websrv.Responding -and !$connec.Responding) { "beide" }
elseif (!$websrv.Responding -and $connec.Responding) { "websrv" }
elseif ($websrv.Responding -and !$connec.Responding) { "connec" }
答案 0 :(得分:6)
你可以这样做:
$status = [int]$websrv.Responding + [int]$connec.Responding * 2
$pmsname = switch ($status) {
0 { 'keiner' }
1 { 'websrv' }
2 { 'connec' }
3 { 'beide' }
default { throw "unrecognized status: $status" }
}
如果进程正在响应,则将Responding
属性的值转换为整数会给出值1,如果不响应,则返回0。通过将该数字与第二个进程的2相乘,可以使两个进程的“响应”状态相互区分,以便您可以添加这些值并使用switch
语句来确定整体状态。
答案 1 :(得分:3)
Ansgar的答案应该完美无缺,但在我看来,对于制作脚本来说有点深奥。
这样的事情只会依次检查每个流程以确保它们正在运行,这样更易读,也可以让您更轻松地调整流程数。
$Processes = ("dwm","explorer","fakeproc")
while ($true){
foreach ($ProcName in $Processes){
$Proc = Get-Process $ProcName -ea SilentlyContinue
if ($Proc -eq $null -or !$Proc.Responding){
Write-Host "Process '$($ProcName)' Not Responding" -Fore Red
}
}
Sleep 1
}