← index
cplusplus11.Examples/UNIX/process/manyfork.cpp
Source: cplusplus11.Examples/UNIX/process/manyfork.cpp
#include<iostream>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<sys/time.h>
#include<cstdlib>
#include<errno.h>
#include<ctime>

int main(void) {
    pid_t id;
    for(int i = 0; i < 4; ++i) {
        id = fork();
        switch(id) {
            case -1:
                std::cerr << "Error on fork()\n";
                exit(EXIT_FAILURE);
                break;
            case 0: {
                timeval t;
                gettimeofday(&t, 0);
                srand(t.tv_sec * t.tv_usec);
                std::cout << "In child process waiting....\n";
                sleep(rand()%10);
                std::cout << getpid() << " is exiting..\n";
                _exit(EXIT_SUCCESS);
            }
                break;
            default:
                break;
        }
    }
    pid_t cid;
    
    while((cid = wait(0)) != -1)
        continue;
    
    if(errno != ECHILD)
        std::cerr << "Error waiting..\n";
    
    std::cout << "Complete.\n";
    return EXIT_SUCCESS;
}