exit in a cleaner fashion on interrupt