Use a named semaphore to do efficient waiting in the listener thread.
Note: NERSC performs cleanup of shared-memory constructs; see "Cray Software Release Overview."  On other systems if the process is terminated abnormally, a semaphore will remain on the system until explicitly removed or the system is rebooted.
Add a watch for how much time we spend stalling the computation.
100-infile jobs seem to be too big -- reduce the sizes of jobs.