#include <stdio.h>
#include <stdlib.h>

void handler4(void);

int
main(int argc, char *argv[])
{
    void handler1(void);
    void handler2(void);
    void handler3(void);

    atexit(handler3);
    atexit(handler2);
    atexit(handler1);
    atexit(handler3);       // register handler3 twice

    printf("job done\n");
    exit(EXIT_SUCCESS);
}

void
handler1(void)
{
    printf("handler 1\n");
}

void
handler2(void)
{
    printf("handler 2\n");
    atexit(handler4);       // register exit handler inside an exit handler
}

void
handler3(void)
{
    printf("handler 3\n");
}

void
handler4(void)
{
    printf("handler 4\n");
}
