【发布时间】:2019-04-23 19:19:55
【问题描述】:
我有一个要求,如果它已经运行了很长时间,我需要杀死\停止主任务。我正在考虑创建一个后台作业来监控时间并在超时后通过适当的消息终止主要作业,但我不知道该怎么做。
像这样..
function Kill-MainTask{
$sb = {
Start-Sleep -Seconds 5
throw "main task should end"
}
$job1 = Start-Job -ScriptBlock $sb
Write-Host "main task running"
Start-Sleep -Seconds 10
#This statement should not run
Write-Host "main task not finished"
}
Kill-MainTask
当我调用 Kill-MainTask 函数时,它应该打印“mian task running”,但 5 秒后应该抛出。
【问题讨论】:
-
$job1 永远不会被调用。您将信息分配给变量,但从不在任何地方使用它。
-
这是我的问题,我该如何使用这些信息?我的主要工作是做很多事情,如果需要超过 5 秒,我想正确地杀死主要工作。
-
你可以翻转它。你有你的初始脚本调用
Start-Job $MainTask,然后,因为它有 Job 对象,你可以检查它是否在 5 秒内完成。既然你有 Job 对象,那么你也可以杀死它。 -
我无法真正翻转,因为在主任务运行时,我需要在控制台上向用户显示输出。如果我将其作为作业运行,我将无法显示进度,这不是一个选项。
标签: powershell parallel-processing background jobs