In the dash shell, when `exec < fifo` is interrupted by SIGCHLD, it exits. So we replace it with `cat fifo |`. Issue discussed in #614