I think you're getting something wrong here. The flow of actions is (within the Kindlet):
1. start application in the background. Logically (=pseudo-code), it's Runtime.getRuntime.exec("thetargetrunner.sh"), where thetargetrunner.sh contains "thetarget.sh &".
2. LauncherKindlet.this.suicide().
The problem seems to be that the suicide() method doesn't work reliably - maybe(!) because the Kindlet has already been "backgrounded", because the target was faster to show than the Kindlet was to terminate. (Again, all just speculation!).
So, conceptually, you're right about "chaining" vs. "forking" - but the method doesn't seem to work the way we want it to. Maybe the method used
here (3rd post) works better, because it launches the target only after the Kindlet was destroyed (or rather: while it is being destroyed). Will try once I get home.