如何使函数异步信号安全?

MOH*_*MED 6 c c++ linux asynchronous signals

我有以下sigaction处理函数

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();
}
Run Code Online (Sandbox Code Playgroud)

有人告诉我,flockprintf不是异步信号安全.我flock在这个列表中找不到备用的异步信号安全功能 .

并根据以上链接:

当信号中断不安全的函数并且信号捕获函数调用不安全的函数时,行为是不确定的

有没有办法使flock 异步信号安全?或者,flock当我收到TERM信号时,还有其他解决方案吗?

gra*_*hel 4

您可以使用fcntl()作为集群()的替代品。