#include <sys/wait.h>
#include <unistd.h>
#include <cerrno>
#include <iostream>
#include <stdexcept>
int main() {
    const pid_t child=::fork();
    if(child<0) throw std::runtime_error("fork");
    if(child==0) ::_exit(7);
    int status=0; pid_t result;
    do { result=::waitpid(child,&status,0); } while(result<0 && errno==EINTR);
    if(result!=child || !WIFEXITED(status) || WEXITSTATUS(status)!=7)
        throw std::runtime_error("child status");
    std::cout<<"child_exit="<<WEXITSTATUS(status)<<'\n';
}
