Return non-zero exit code for failed run

I think because .run invokes run_file, and run_file forks,
the exit status from the fork is swallowed.

Implementing non-zero exits from .run allows for CI, etc, to
use the exit status.