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

int my_var = 0; // not shared

int main(){
	uint32_t pid;
	int status;
	pid=fork();

	if (pid < 0){
		std::cerr<<"Fork failed"<<std::endl;
		return 1;
	}
	if (pid == 0){
		// CHILD
		std::cout << "\n---CHILD---\n";
		std::cout << " PID       = " << getpid() << std::endl;
		std::cout << " PPID      = " << getppid() << std::endl;
		std::cout << " fork() retruned " << pid << std::endl;
		std::cout << "Initial my_var = " << my_var << std::endl;
		for (int i=0; i<5; i++){
			my_var += 1;
			std::cout << "Child my_var = " << my_var << std::endl;
		}
		_exit(120);
	}
	else {
		my_var = 10;
		std::cout << "\n---PARENT---\n" << std::endl;
		std::cout << " PID       = " << getpid() << std::endl;
		std::cout << " Child PID = " << pid << std::endl;
		std::cout << "Initial my_var = " << my_var << std::endl;
		for (int i=0;i<5;i++){
			my_var -=1;
			std::cout << "Parent my_var = " << my_var << std::endl;
		}
		uint32_t terminated = wait(&status);
		std::cout << "\nPARENT after wait()\n";
		std::cout << "Terminated child PID = " << terminated << std::endl;
		std::cout << "Exit status: " << WEXITSTATUS(status) << std::endl;
	}
	return 0;
}
