^C sends a SIGINT. Should use os.Interrupt. Not sure if we should catch SIGTERM or not; stuff that lives in syscall is (usually?) non-portable.