This is what I came up with.
First, a dummy run script, which in your case will be something quite different:
Next, a bg script that puts run jobs into the background, with appropriate redirections:
( ( touch $$.running; "$@" > $$.out 2>$$.err ; echo $? > $$.exitcode ) & )
Finally, a ...