correctly handle SIGINT, SIGTERM and SIGTTOU