Chris,
It will be useful to see in a couple of places: - Container logs (via the RM/node manager web UI) for the killed container. Even RM’s own log might indicate that it killed the container for some reason - If Apex is initiating the “termination” because of the blockage/delay Ram described, you should see an event or a log entry in the Stram saying so. Can you check and let us know? Sanjay Join us at Apex Big Data World-San Jose, April 4, 2017! http://www.apexbigdata.com/san-jose-register.html From: Munagala Ramanath <[email protected]> Reply-To: <[email protected]> Date: Friday, February 10, 2017 at 2:57 PM To: <[email protected]> Subject: Re: Running shell commands which fork from within Operator exits with 143 exit code Looks like you may be blocking the operator thread with the p.waitFor() and the rest of the code to process the child process output. Try using a separate thread to handle the child as described, for example, here: http://stackoverflow.com/questions/26319804/adapting-c-fork-code-to-a-java-program But avoid calls like Process.waitFor() and Thread.join() which can potentially block for a long time. Ram On Thu, Feb 9, 2017 at 11:02 AM, Chris Benninger <[email protected]> wrote: Hi, I have a little bit of a weird use-case but I'm running a script from within an operator which forks a sub process using & (I know I know). Im porting this from spark as a PoC and in Apex It seems to be sending the parent shell process a SIGTERM resulting in a 143. When I remove the fork (altering the output) it all works fine however. my code: String cmd = "bash myscript.sh" Process p = Runtime.getRuntime().exec(cmd, null, workingDir.toFile()); p.waitFor(); BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = stdoutReader.readLine()) != null) { System.out.println(line); } BufferedReader stderrReader = new BufferedReader( new InputStreamReader(p.getErrorStream())); while ((line = stderrReader.readLine()) != null) { System.out.println(line); } int retValue = p.exitValue(); System.out.println("Exit code: "+retValue); Any help appreciated.
