0

我有以下 PowerShell 5 程序:

$job = Start-Job -ScriptBlock {timeout.exe 10 /NOBREAK}
Wait-Job $job

当我运行它时,它会立即终止并显示以下输出:

Id 名称 PSJobTypeName 状态 HasMoreData 位置命令
-- ---- ------------- ----- ------------ -------- --------
1 Job1 BackgroundJob Completed True localhost timeout.exe 10 /NOBREAK

并且timeout.exe不会出现在任务管理器中。

为什么它在终止前不等待 10 秒?当我timeout.exe 10 /NOBREAK在作业之外调用时,它会等待 10 秒,就像Start-Sleep 10在作业中调用一样。

我不是在寻找一种不同的方法来解决相同的问题(睡眠),而是专门寻找为什么这个程序的行为方式如此的答案。

4

1 回答 1

1

这里的问题是 timeout.exe 要捕获 Ctrl+C,它会重定向输入,这在后台作业中不起作用。显然,如果您只想睡觉,那么 Start-Sleep 就可以了。

您可以通过执行以下操作查看作业的输出和错误消息:

Receive-Job 1
于 2016-12-13T14:06:58.910 回答