KillProcesses.ps1 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. $ErrorActionPreference = 'Continue'
  2. function _kill($processName) {
  3. try {
  4. # Redirect stderr to stdout to avoid big red blocks of output in Azure Pipeline logging
  5. # when there are no instances of the process
  6. & cmd /c "taskkill /T /F /IM ${processName} 2>&1"
  7. } catch {
  8. Write-Host "Failed to kill ${processName}: $_"
  9. }
  10. }
  11. function _killJavaInstances() {
  12. $_javaProcesses = Get-Process java -ErrorAction SilentlyContinue |
  13. Where-Object { $_.Path -like "$env:JAVA_HOME*" };
  14. foreach($_javaProcess in $_javaProcesses) {
  15. try {
  16. Stop-Process $_javaProcess
  17. } catch {
  18. Write-Host "Failed to kill java process: $_javaProcess"
  19. }
  20. }
  21. }
  22. function _killSeleniumTrackedProcesses() {
  23. $files = Get-ChildItem $env:SeleniumProcessTrackingFolder -ErrorAction SilentlyContinue;
  24. # PID files have a format of <<pid>>.<<guid>>.pid
  25. $pids = $files |
  26. Where-Object { $_.Name -match "([0-9]+)\..*?.pid"; } |
  27. Foreach-Object { $Matches[1] };
  28. foreach ($currentPid in $pids) {
  29. try {
  30. & cmd /c "taskkill /T /F /PID $currentPid 2>&1"
  31. } catch {
  32. Write-Host "Failed to kill process: $currentPid"
  33. }
  34. }
  35. }
  36. function _listProcesses($processName) {
  37. $processes = Get-WmiObject win32_process -Filter "name like '%$processName'" -ErrorAction SilentlyContinue;
  38. if ($processes) {
  39. Write-Host "These processes will be killed..."
  40. $processes | select commandline | Out-String -Width 800
  41. }
  42. }
  43. _listProcesses dotnet
  44. _kill dotnet.exe
  45. _kill testhost.exe
  46. _kill iisexpress.exe
  47. _kill iisexpresstray.exe
  48. _kill w3wp.exe
  49. _kill msbuild.exe
  50. _kill vbcscompiler.exe
  51. _kill vctip.exe
  52. _kill h2spec.exe
  53. _kill WerFault.exe
  54. _killJavaInstances
  55. _killSeleniumTrackedProcesses
  56. # Special case these. When testing with -ci locally, you typically don't actually want to kill your browser or git command line
  57. if ($env:TF_BUILD) {
  58. _kill chrome.exe
  59. _kill git.exe
  60. }
  61. if (Get-Command iisreset -ErrorAction ignore) {
  62. iisreset /restart
  63. }
  64. Stop-Service w3svc -NoWait -ErrorAction Ignore
  65. exit 0