Ho la seguente funzione di sigaction
gestoreCome rendere sicura la funzione async-signal?
void signal_term_handler(int sig)
{
printf("EXIT :TERM signal Received!\n");
int rc = flock(pid_file, LOCK_UN | LOCK_NB);
if(rc) {
char *piderr = "PID file unlock failed!";
fprintf(stderr, "%s\n", piderr);
printf(piderr);
}
abort();
}
Qualcuno mi ha detto che flock
e printf
non sono async-signal-safe. E non riuscivo a trovare una funzione asincrona-segnale sicura alternativa per flock
in questo list.
e secondo link qui:
quando un segnale interrompe una funzione pericoloso e la segnalazione di cattura chiama una funzione non sicuro, il comportamento è indefinito
Esistono modo rendere flock
async-signal-safe? O c'è un'altra soluzione per eseguire flock
quando ricevo TERM
segnale?
Possibile duplicato di [Come evitare l'uso di printf in un gestore di segnale?] (Https://stackoverflow.com/questions/16891019/how-to-avoid-using-printf-in-a-signal-handler) per 'printf', https://stackoverflow.com/questions/16979059/use-flock-in-the-sigaction-handler per' flock'. –