在Windows 7桌面中使用Powershell 2.0
我想创建一个运行ant命令的进程,然后等待该进程在几分钟内完成。如果超时并且进程仍在运行,那么我想杀死它。
我写了一些代码如下:
$p = Start-Process "cmd.exe" '/c ant execute' -PassThru -RedirectStandardOutput $log_file_path
Wait-Process -id $p.ID -timeout 100
if(!$p.hasExited) {
echo "kill the process"
$p.Kill()
#Stop-Process $p.ID
}
Start-Sleep -s 30
# continue to do other things
虽然进程没有被杀死,但即使在Start-Sleep语句执行后它仍然在运行。
我也尝试使用Stop-Process命令,因为注释掉的行显示,没有运气,该过程仍在运行。
我可能错过了一些重要的事情,请提供线索。
编辑:
事实证明,cmd窗口中仍有一些子进程仍在运行,只杀死cmd进程是不够的。
我终于通过以下代码完成了工作:
if(!$p.hasExited) {
echo "kill the process"
taskkill /T /F /PID $p.ID
#$p.Kill()
#Stop-Process $p.ID
}
答案 0 :(得分:2)
如果要终止整个进程树,还需要查找并停止子进程。
这是一篇很好的文章,解释了它并告诉你如何做到这一点:
http://powershell.com/cs/blogs/tobias/archive/2012/05/09/managing-child-processes.aspx
答案 1 :(得分:0)
我推入了github微小的项目,可用于为他和他的孩子过程运行进程和设置超时:https://github.com/burlachenkok/process_tool
它是Makefile的源代码,它不是PowerShell脚本。但希望它对你有用。