|
|
@@ -0,0 +1,96 @@ |
|
|
|
# |
|
|
|
# Licensed to the Apache Software Foundation (ASF) under one |
|
|
|
# or more contributor license agreements. See the NOTICE file |
|
|
|
# distributed with this work for additional information |
|
|
|
# regarding copyright ownership. The ASF licenses this file |
|
|
|
# to you under the Apache License, Version 2.0 (the |
|
|
|
# "License"); you may not use this file except in compliance |
|
|
|
# with the License. You may obtain a copy of the License at |
|
|
|
# |
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
# |
|
|
|
# Unless required by applicable law or agreed to in writing, |
|
|
|
# software distributed under the License is distributed on an |
|
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
|
|
|
# KIND, either express or implied. See the License for the |
|
|
|
# specific language governing permissions and limitations |
|
|
|
# under the License. |
|
|
|
# |
|
|
|
# |
|
|
|
# Powershell script for cleaning up remaining browser and selenium server processes on the CI servers |
|
|
|
# |
|
|
|
# Author: Martin Stockhammer <martin_s@apache.org> |
|
|
|
# Date : 2017-04-30 |
|
|
|
# |
|
|
|
# Descriptions: |
|
|
|
# Stopps processes related to the selenium checks, if they were not stopped by the selenium server, because |
|
|
|
# the job was aborted. |
|
|
|
# The script cannot determine, which of the processes are started by the current job, so if there are |
|
|
|
# parallel jobs running on this server that start processes with the same name and user, these |
|
|
|
# will be stopped too. |
|
|
|
# |
|
|
|
# Per default the script will stop "firefox.exe","iexplore.exe","chrome.exe" |
|
|
|
# and the processes "java.exe","mshta.exe" if their commandline arguments contain "selenium-server" |
|
|
|
# |
|
|
|
# Parameters: |
|
|
|
# -Verbose : If set, more output will be printed |
|
|
|
# -Browsers proc1,proc2 : The list of executables that define the browser processes, that are started by selenium |
|
|
|
# -SeleniumProcesses : The list of processes with the string "selenium-server" in the commandline arguments |
|
|
|
|
|
|
|
param ( |
|
|
|
[switch]$Verbose = $False, |
|
|
|
[String[]]$Browsers = @("firefox.exe","iexplore.exe","chrome.exe"), |
|
|
|
[String[]]$SeleniumProcesses = @("mshta.exe","java.exe") |
|
|
|
) |
|
|
|
|
|
|
|
# $currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name |
|
|
|
$currentUser = $env:UserName |
|
|
|
Write-Output "User: $currentUser" |
|
|
|
|
|
|
|
if ($Verbose) |
|
|
|
{ |
|
|
|
Get-Process | Get-Member |
|
|
|
|
|
|
|
$View = @( |
|
|
|
@{l='Handles';e={$_.HandleCount}}, |
|
|
|
@{l='NPM(K)';e={ (Get-Process -Id $_.ProcessId).NonpagedSystemMemorySize/1KB -as [int]}}, |
|
|
|
@{l='PM(K)';e={ $_.PrivatePageCount/1KB -as [int]}}, |
|
|
|
@{l='WS(K)';e={ $_.WorkingSetSize/1KB -as [int]}}, |
|
|
|
@{l='VM(M)';e={ $_.VirtualSize/1mB -as [int]}}, |
|
|
|
@{l='CPU(s)';e={ (Get-Process -Id $_.ProcessId).CPU -as [int]}}, |
|
|
|
@{l='Id';e={ $_.ProcessId}}, |
|
|
|
'UserName' |
|
|
|
@{l='ProcessName';e={ $_.ProcessName}} |
|
|
|
) |
|
|
|
Get-WmiObject Win32_Process | % { $_ | |
|
|
|
Add-Member -MemberType ScriptProperty -Name UserName -Value { |
|
|
|
'{0}\{1}' -f $this.GetOwner().Domain,$this.GetOwner().User |
|
|
|
} -Force -PassThru |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
foreach ($procName in $SeleniumProcesses) |
|
|
|
{ |
|
|
|
$processes = Get-WmiObject Win32_Process -Filter "name = '$procName'" | Where-Object {$_.GetOwner().User -eq $currentUser } | Where-Object {$_.CommandLine -match "selenium-server"} |
|
|
|
if ($Verbose) { |
|
|
|
Write-Output "Filter: name = '$procName'" |
|
|
|
} |
|
|
|
foreach($proc in $processes) |
|
|
|
{ |
|
|
|
Write-Output "stopping proccess $($proc.ProcessId) with $($proc.ThreadCount) threads; $($proc.CommandLine.Substring(0, 50))..." |
|
|
|
Stop-Process -F $proc.ProcessId |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
foreach ($procName in $Browsers) |
|
|
|
{ |
|
|
|
$processes = Get-WmiObject Win32_Process -Filter "name = '$procName'" | Where-Object {$_.GetOwner().User -eq $currentUser } |
|
|
|
if ($Verbose) { |
|
|
|
Write-Output "Filter: name = '$procName'" |
|
|
|
} |
|
|
|
foreach($proc in $processes) |
|
|
|
{ |
|
|
|
Write-Output "stopping proccess $($proc.ProcessId) with $($proc.ThreadCount) threads; $($proc.CommandLine.Substring(0, 50))..." |
|
|
|
Stop-Process -F $proc.ProcessId |
|
|
|
} |
|
|
|
} |