#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <assert.h>

main(int argc, char *argv[])
{
    int fds[2];
    int count = atoi(argv[1]);
    int sum = 0;
    int tmp;

    if(!fork())
    {
        // b
        int i;

        system("ps -o pid,ppid,comm"); // first

        for(i = 1; i <= count; i++)
        {
            pipe(fds);
            if(!fork())
            {
                // g
                close(fds[0]);
                close(1);
                dup(fds[1]);
                close(fds[1]);
                sleep(1);
                execlp("./g", "./g", NULL);
                exit(1);
            }
            system("ps -o pid,ppid,comm"); // X g
            close(fds[1]);
            read(fds[0], &tmp, sizeof(int));
            close(fds[0]);
            sum = sum + tmp;
            sleep(1);
            wait(0);
        }

        printf("Sum of pids: %d.\n", sum);
        exit(0);
    }

    wait(0);
    system("ps -o pid,ppid,comm"); // last
}
