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.

 

Reply via email to