Мне нужно, чтобы моя программа правильно завершила все свои процессы, перехватывая сигнал SIGTERM, но даже CTRL + C (это SIGINT, я думаю). Как я могу изменить его, чтобы он работал?
Я попытался опубликовать только код, необходимый для того, чтобы не создавать путаницу, поскольку программа работает, и мне нужно только добавить это управление сигналами.
include <signal.h>
int nproc = 10;
int listaPID[10];
int forkValue;
int main (void){
signal(SIGTERM,signalHandler);
//...
createSM();
for(int i=0; i<nproc; i++){
forkValue = fork();
if(forkValue == 0)
break;
listaPid[i] = forkValue;
}
if (forkValue==0){
//child's tasks
removeSM();
exit(0);
}
//parent's tasks
deleteSM();
exit(0);
}
void signalHandler(int sig){
//if parent, kill all of its childs + remove and delete shared memory + exit
if (forkValue>0){
for(int i=0;i<nproc;i++)
kill((listaPid[i]),SIGTERM);
deleteSM();
exit(0);
}
//if son, remove shared memory + exit
else {
removeSM();
exit(0);
}
}