/* * @test * @bug 5049299 * @summary (process) Use posix_spawn, not fork, on S10 to avoid swap exhaustion * @compile BasicLauncher.java Basic.java * @run main BasicLauncher */ import java.io.*; import java.nio.file.*; public class BasicLauncher { private static boolean passed = false; public static void main(String args[]) throws Exception { String osName = System.getProperty("os.name"); if (osName.startsWith("SunOS")) { BasicLauncher l = new BasicLauncher(); l.start(); } } private void start() throws Exception { String separator = System.getProperty("file.separator"); String jdkpath = System.getProperty("test.jdk") + separator + "bin" + separator; String srcpath = System.getProperty("test.src", ".") + separator; String testClasses = System.getProperty("test.classes", "."); ProcessBuilder builder = new ProcessBuilder( jdkpath + "java", "-cp", testClasses, "-Djdk.lang.Process.launchMechanism=posix_spawn", "Basic"); builder.redirectErrorStream(true); Process testProc = builder.start(); printProcessThread ppt = new printProcessThread(testProc, "testproc"); ppt.start(); testProc.waitFor(); System.out.println("testproc done"); if (!passed) throw new RuntimeException("Test Failed: "); } class printProcessThread extends Thread { Process p; String pName; public printProcessThread(Process p, String pName) { this.p = p; this.pName = pName; } @Override public void run() { try (BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()))) { String line; while ((line = reader.readLine()) != null) { System.out.println("[Output: " + pName + "]" + line); if (line.contains("failed = 0")) { passed = true; } } } catch (Exception e) { System.out.println("Exception encountered in " + pName + " thread\n" + e); } } } }