package SapforTestingSystem.SapforTestingPlaner; import Common.Global; import Common.Utils.Utils; import SapforTestingSystem.Json.SapforPackage_json; import SapforTestingSystem.Json.SapforScenario_json; import SapforTestingSystem.PerformSapforTask; import SapforTestingSystem.SapforTask.SapforTask; import SapforTestingSystem.ThreadsPlanner.ThreadsPlanner; import java.io.File; import java.util.Vector; public class SapforTestingPlanner extends ThreadsPlanner { SapforScenario_json scenario_json = null; Vector tasks = new Vector<>(); public SapforTestingPlanner() throws Exception { super(Global.properties.threadsTimeout, Global.properties.threadsNum); scenario_json = (SapforScenario_json) Utils.jsonFromFile(new File(Global.Home, "scenario.txt"), SapforScenario_json.class); //формирование списка задач. File sapfor_drv = new File(Global.Home, scenario_json.sapfor_drv); for (SapforPackage_json sapforPackage_json : scenario_json.packages) { for (String testName : scenario_json.tests) { //--- чтобы было можно на нее сослаться после выполнения всех нитей. SapforTask task = new SapforTask(); tasks.add(task); //--- addThread(() -> new PerformSapforTask().Do( sapfor_drv, sapforPackage_json, testName, task )); } } interruptThread.start(); } @Override public void Interrupt() throws Exception { System.out.println("killing " + scenario_json.sapfor_drv + "..."); String kill_command = Global.isWindows ? ("taskkill /FI \"IMAGENAME eq " + scenario_json.sapfor_drv + "\" /F /T") : ("killall -SIGKILL " + scenario_json.sapfor_drv); Process killer = Runtime.getRuntime().exec(kill_command); killer.waitFor(); System.out.println("done!"); //todo для надежности сделать еще один kill с внешнего процесса. // может быть гонка, что нить успеет запустить процесс уже после интеррупта. } @Override protected void finalize() { System.exit(0); } }