假设您有一个生成子流程树的流程- 我正在尝试创建一个看门狗进程,以在树的头被终止(头指这两行的调用者)的情况下杀死整个进程树。
Start-Process -FilePath '..\SpawnProcessTree.bat' -PassThru
Start-Process powershell -ArgumentList '..\WatchDogKillProcessTree.ps1', $pid -Wait
以上代码段在整个脚本中止的情况下都可以正常工作,但是如果脚本未中止则将无限期挂起。
WatchDogKillProcessTree.ps1中的代码如下:
$waitproc = Get-Process -Id $ps_pid
$waitproc.WaitForExit()
Kill-Tree $ps_pid
从Terminate process tree in PowerShell given a process ID取来杀树的地方
显而易见的答案是换行:
$watchdog = Start-Process powershell -ArgumentList '..\WatchDogKillProcessTree.ps1', $pid -PassThru
Start-Process -FilePath '..\SpawnProcessTree.bat' -Wait
$watchdog.Kill()
但是当我这样做时,看门狗不会在中止时终止进程树。有人会想到为什么重新排列这些行无法按预期进行吗?请让我知道是否需要任何其他信息。