class LaunchTool implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) {
        File testFile = new File("test-output");
        if (!testFile.exists()) {
            testFile.mkdirs();
        }
        ScheduleTool.scheduleAtFixedRate(
                new TransportConnectionThread(),
                TransportConnectionThread.DELAY,
                TransportConnectionThread.DELAY,
                TransportConnectionThread.TIME_UNIT
        );
        TransportWorker.readQueue();
        new Thread(() -> {
            File file = new File("plugins/sonic-go-mitmproxy-ca-cert.pem");
            if (!file.exists()) {
                log.info("Generating ca file...");
                SGMTool.startProxy("init", SGMTool.getCommand());
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                // 仅生成证书
                SGMTool.stopProxy("init");
                file = new File("plugins/sonic-go-mitmproxy-ca-cert.pem");
                if (!file.exists()) {
                    log.info("init sonic-go-mitmproxy-ca failed!");
                } else {
                    log.info("init sonic-go-mitmproxy-ca Successful!");
                }
            }
        }).start();
    }

    @PreDestroy
    public void destroy() {<FILL_FUNCTION_BODY>}
}

        for (String key : GlobalProcessMap.getMap().keySet()) {
            Process ps = GlobalProcessMap.getMap().get(key);
            ps.children().forEach(ProcessHandle::destroy);
            ps.destroy();
        }
        for (String key : IOSProcessMap.getMap().keySet()) {
            List<Process> ps = IOSProcessMap.getMap().get(key);
            for (Process p : ps) {
                p.children().forEach(ProcessHandle::destroy);
                p.destroy();
            }
        }
        log.info("Release done!");
    
<no_super_class>