#!/usr/bin/env python3

# Copyright (C) 2010 Apple 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 main():
    tasksToKill = [ "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"]
					
    for task in tasksToKill:
        os.system("taskkill /t /f /im " + task)

if __name__ == '__main__':
    sys.exit(main())
