Ich arbeite an Code so etwas wie diesesWie frei dynamische zugewiesene Variable von SIGTERM frei?
... HEADERS ...
int *var;
void child() {
... //some work
free(var);
exit(EXIT_SUCCESSFUL);
}
int main(void) {
...
//allocate variable
var = (int *) malloc(N*sizeof(int));
... //work with var
for(int i; i<PROC_COUNT; i++) {
pid_t child = fork();
if(pid == 0) {
child(); //main function of new proces
break;
}
elseif(pid < 0) {
//there is enormous problem -> kill every proces
kill(0, SIGTERM);
waitpid(0, NULL, 0); //wait for children
free(var);
exit(EXIT_FAILURE);
}
}
free(var);
return EXIT_SUCCESS;
}
Wenn Prozess gegabelt ist, werden alle Variablen zu geklont. Im Normalfall werden alle Kopien von var freigegeben.
Wenn es einen Fehler von fork()
gibt, sende ich Signal SIGTERM an alle erstellten Prozesse. Und ich muss Signalhandler für SIGTERM schreiben, die var freigibt und Anwendung beendet. Allerdings ist free() nicht signal safe function
- also sollte ich es nicht nennen. Aber wie frei() diese Variable?
Vielen Dank für Ihre Antworten ...
EDIT: valgrind zeigt auch noch reacheable Variable:
==5928== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 1)
==5928== malloc/free: in use at exit: 20 bytes in 1 blocks.
==5928== malloc/free: 1 allocs, 0 frees, 20 bytes allocated.
==5928== For counts of detected errors, rerun with: -v
==5928== searching for pointers to 1 not-freed blocks.
==5928== checked 49,164 bytes.
Enemouse? Ist das eine Art großes prähistorisches Nagetier? :-) – JesperE
Ich bitte um Verzeihung, es ist ein bisschen spät, in der Slowakei, also habe ich Fehler gemacht. Danke für die Nachricht. – izidor