¿Cómo hacer que una función async-signal-safe?

Tengo los siguientessigaction función de controlador

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();
}

Alguien me dijo queflock yprintf no son asíncronos a señales seguras. Y no pude encontrar una función alternativa async-signal-safe paraflocken estolista.

y según el enlace anterior:

cuando una señal interrumpe una función insegura y la función de captura de señal llama a una función insegura, el comportamiento es indefinido

¿Hay alguna manera de hacerflock async-señal-seguro? O hay otra solución para ejecutarflock cuando reciboTERM ¿señal?

Respuestas a la pregunta(3)

Su respuesta a la pregunta