Multithreading Powershell,停止工作太长时间了
我创建了一个powershell作业,我想将其运行时间限制为10秒。 所以我使用了Wait Job命令,如果超时,我会执行Stop Job命令。 问题是Stop Job命令大约需要2分钟。 我如何修复它并立即停止工作Multithreading Powershell,停止工作太长时间了,multithreading,powershell,timeout,jobs,Multithreading,Powershell,Timeout,Jobs,我创建了一个powershell作业,我想将其运行时间限制为10秒。 所以我使用了Wait Job命令,如果超时,我会执行Stop Job命令。 问题是Stop Job命令大约需要2分钟。 我如何修复它并立即停止工作 While($hasTimeFromNTP -eq $false) { Write-Host "Start get time from NTP" -ForegroundColor Yellow Start-Job -Name GetNTPTime -ScriptBl
While($hasTimeFromNTP -eq $false)
{
Write-Host "Start get time from NTP" -ForegroundColor Yellow
Start-Job -Name GetNTPTime -ScriptBlock $getTimeFromNtp | Out-Null
$result = Wait-Job GetNTPTime -Timeout 10
if($result -ne $null)
{
$NTPTime = Receive-Job GetNTPTime
$hasTimeFromNTP = $true
}
else
{
Write-Host "GetTimeFromNTP timed out"
Stop-Job GetNTPTime
Remove-Job GetNTPTime -Force
}
}
谢谢我在停止作业时没有看到
-Force
参数。一个选项是让作业返回它在$pid
中运行的PowerShell进程id作为初始输出。您可以使用该pid停止为该后台作业启动的Powershell.exe进程。这很苛刻,但如果您不想等待2分钟,我看不到其他方法可以迫使作业更快停止。我在一台机器上经历过这种缓慢停止作业,但在其他机器上没有。重新启动那台机器后,我也不再在那里遇到它。请确保代码不会挂在作业中的任何行上,因为如果代码实际正在运行且没有等待(如网络接收),它会停止得更快。另外,请使用“开始睡眠”而不是“[Threading.Thread]::Sleep()”。因为启动睡眠可以被中断,但win API睡眠不能。