#include <iostream>
#include <unistd.h>
#include <csignal>
using namespace std;

volatile sig_atomic_t keep_running=1;
void handle_sigint(int signal_number){
	cout<<"\n\n[KERNEL ALERT] Intercepted Signal Number: "<<signal_number<<" (SIGINT)"<<endl;
	cout<<"[SYSTEM] 'Ctrl+C' detected! Initiating graceful shutdown sequence..."<<endl;
	keep_running=0;
}

int main(){
	cout<<"==============================================="<<endl;
	cout<<"        LINUX IPC: PROCESS SIGNALING           "<<endl;
	cout<<"===============================================\n"<<endl;
	signal(SIGINT, handle_sigint);
	cout<<"[SYSTEM] The program is now running in an infinite loop."<<endl;
	cout<<"[SYSTEM] Try to kill me by pressing 'Ctlr+C' in the terminal!"<<endl;
	cout<<"--------------------------------------------------------------"<<endl;
	int seconds_passed=0;
	while(keep_running){
		cout<<"Working...("<<seconds_passed<<" seconds elepsed)"<<endl;
		sleep(1);
		seconds_passed++;
	}
	cout<<"\n------------------------------------------------------------"<<endl;
	cout<<"[CLEANUP] Saving all user data..."<<endl;
	sleep(1);
	cout<<"[CLEANUP] Closing all database connections..."<<endl;
	sleep(1);
	cout<<"============================================================"<<endl;
	cout<<"[SYSTEM] Shutdown complete. Terminating safely."<<endl;
	cout<<"============================================================"<<endl;
	return 0;
}
