i see now, atexit seems to run in order, even before it's exit time