session: get rid of waitpid() by establishing SIGCHLD watch