It's not exactly elegant, but you can make sh
launch the subtasks as background processes and then write their PIDs to a file using the shell variable $!
as per here, blocking till each background process completes to maintain asynchronicity:
commandToRun = @"command1 & echo $! > /tmp/childpid; wait $!; command2 & echo $! > /tmp/childpid; wait $!";
Then when you call [self.task terminate]
you should also invoke:
system("kill -9 `cat /tmp/childpid`");
...or something equivalent.