#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include "../lpi.h"     // for getSigname()
                        // implemented in ../defs.c

void sig_handler(int signo);
void description(const char *msg);

int
main(int argc, char *argv[])
{
    int i;
    extern int NSIGS;
    extern struct sig sigs[];

    setbuf(stdout, NULL);

    description("<parent>");
    for (i = 0; i < NSIGS; i++)
        signal(sigs[i].no, sig_handler);

    if (fork() == 0) {
        description("first child created");
        raise(SIGSTOP);
        description("first child continues");
    }
    else {
        if (fork() == 0) {
            description("second child");
            for (i = 0; i < 500000; i++)
                ;
        }
    }
    description("done");
    exit(EXIT_SUCCESS);
}

void
description(const char *msg)
{
    printf("PID=%ld PPID=%ld    %s\n",
            (long) getpid(), (long) getppid(), msg);
}

void
sig_handler(int signo)
{
    printf("PID=%ld              caught signal %d (%s)\n",
            (long) getpid(), signo, getSigname(signo));
}
