【发布时间】:2024-01-14 07:18:01
【问题描述】:
我有以下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();
}
有人告诉我flock 和printf 不是异步信号安全的。而且我在这个list 中找不到flock 的备用异步信号安全功能。
根据上面的链接:
当信号中断不安全的功能和信号捕获时 函数调用不安全的函数,行为未定义
有没有办法让flock异步信号安全?或者当我收到TERM 信号时是否有另一种解决方案来执行flock?
【问题讨论】:
-
How to avoid using printf in a signal handler? 可能重复
printf,*.com/questions/16979059/… 可能重复flock。
标签: c++ c linux asynchronous signals