#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <setjmp.h>
#include <unistd.h>

sigjmp_buf buf;

void handler(int sig)
{
    siglongjmp(buf, 1);
}

int main(void)
{
    struct sigaction sa;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_RESTART;
    sa.sa_handler = handler;

    if (sigaction(SIGINT, &sa, NULL)) {
        perror("sigaction");
        return 1;
    }

    if (!sigsetjmp(buf, 1)) {
        puts("starting\n");
    }
    else
        puts("restarting\n");

    while(1) {
        sleep(1);
        puts("processing...\n");
    }

    return 1; /* Control never reaches here */
}
