blob: d8effaecb0df97ddee5777c94fda048c6ccbba35 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (C) 2010 Apple Inc. All rights reserved.
# Copyright (C) 2011 Google Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import os, sys
def listAllWebKitPrograms(builddir_bin):
foundWebKitPrograms = []
for root, dirs, files in os.walk(builddir_bin):
for file in files:
if os.access(os.path.join(root, file), os.X_OK):
foundWebKitPrograms.append(file)
return foundWebKitPrograms
def main(user=None):
tasksToKillWin = [
"cl.exe",
"devenv.com",
"devenv.exe",
"DumpRenderTree.exe",
"DumpRenderTree_debug.exe",
"httpd.exe",
"imagediff.exe",
"imagediff_debug.exe",
"jsc.exe",
"jsc_debug.exe",
"LightTPD.exe",
"link.exe",
"midl.exe",
"perl.exe",
"Safari.exe",
"svn.exe",
"testapi.exe",
"testapi_debug.exe",
"VcBuildHelper.exe",
"wdiff.exe",
"WebKit2WebProcess.exe",
"WebKit2WebProcess_debug.exe",
"WebKitTestRunner.exe",
"WebKitTestRunner_debug.exe",
]
tasksToKillMac = [
"apache2",
"cc1plus",
"cc1objplus",
"clang",
r"clang\\+\\+",
"gcc-4.2",
"httpd",
"i686-apple-darwin10-gcc-4.2.1",
"ImageDiff",
"jsc",
"LayoutTestHelper",
"make",
"perl5.12",
"perl5.16",
"perl5.18",
"perl",
"Problem Reporter",
"ruby",
"Safari Web Content",
"Safari",
"svn",
"DumpRenderTree",
"TestWebKitAPI Web Content",
"TestWebKitAPI",
"PluginProcess",
"com.apple.WebKit.Plugin.64",
"com.apple.WebKit.Plugin.32",
"com.apple.WebKit.PluginProcess",
"com.apple.WebKit.PluginProcess.Development"
"WebKitTestRunner Web Content",
"WebKitTestRunner",
"WebProcess",
"xcodebuild",
# FIXME: Consider moving iOS-specific tasks to their own list.
"Simulator",
]
taskToKillUnix = [
# System process that are executed as part of the build process
"cc1plus",
"ld.gold",
"ld",
"make",
"cmake",
"svn",
# System process that are executed as part of the test steps
"Xvfb",
"gdb",
"ruby",
"apache2",
"httpd",
# WebKit related process names are automatically generated for GTK+/WPE/JSCOnly
]
# This allows to specify on the environment of the bot a list of process that should be killed.
tasksToKill = os.getenv("WEBKITBOT_TASKSTOKILL", "").split()
if sys.platform == 'darwin':
for task in tasksToKill + tasksToKillMac:
os.system("killall -9 -v -m " + task)
# Shutdown any simulators
if os.geteuid() == 0 and user:
os.system("sudo -u {} xcrun simctl shutdown booted".format(user))
else:
os.system("xcrun simctl shutdown booted")
# Kill all instances of python executing run-webkit-tests
os.system("ps aux | grep -E '.+/Python .+(run_webkit_tests|run-webkit-tests|mod_pywebsocket)' | grep -v grep | awk '{print $2}' | xargs kill")
elif sys.platform == 'cygwin' or sys.platform == 'win32':
for task in tasksToKill + tasksToKillWin:
os.system("taskkill /t /f /im " + task)
elif sys.platform.startswith('linux'):
builddir_bin = "WebKitBuild/Release/bin" if os.path.isdir("WebKitBuild/Release/bin") else "WebKitBuild/Debug/bin"
for task in tasksToKill + taskToKillUnix + listAllWebKitPrograms(builddir_bin):
os.system("killall -9 -v " + task)
os.system("ps aux | grep -P '.+/python .+(run_webkit_tests|run-webkit-tests|mod_pywebsocket)' | grep -v grep | awk '{print $2}' | xargs kill")
else:
sys.exit()
# FIXME: Should we return an exit code based on how the kills went?
if __name__ == '__main__':
user = sys.argv[1] if len(sys.argv) > 1 else None
sys.exit(main(user))