Running bash script does not return to terminal when using ampersand (&) to run a subprocess in the background

theGuardian picture theGuardian · Feb 2, 2015 · Viewed 16.4k times · Source

I have a script (lets call it parent.sh) that makes 2 calls to a second script (child.sh) that runs a java process. The child.sh scripts are run in the background by placing an & at the end of the line in parent.sh. However, when i run parent.sh, i need to press Ctrl+C to return to the terminal screen. What is the reason for this? Is it something to do with the fact that the child.sh processes are running under the parent.sh process. So the parent.sh doesn't die until the childs do?

parent.sh

#!/bin/bash
child.sh param1a param2a &
child.sh param1b param2b &
exit 0

child.sh

#!/bin/bash
java com.test.Main 
echo "Main Process Stopped" | mail -s "WARNING-Main Process is down." [email protected]    

As you can see, I don't want to run the java process in the background because i want to send a mail out when the process dies. Doing it as above works fine from a functional standpoint, but i would like to know how i can get it to return to the terminal after executing parent.sh.

Answer

theGuardian picture theGuardian · Feb 3, 2015

What i ended up doing was to make to change parent.sh to the following

#!/bin/bash
child.sh param1a param2a > startup.log &
child.sh param1b param2b > startup2.log &
exit 0

I would not have come to this solution without your suggestions and root cause analysis of the issue. Thanks!

And apologies for my inaccurate comment. (There was no input, I answered from memory and I remembered incorrectly.)