| #!/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)) |