Tôi có sau chức năng sigaction
handlerLàm thế nào để tạo một hàm async-signal-safe?
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();
}
Có người nói với tôi rằng flock
và printf
không async-tín hiệu an toàn. Và tôi không thể tìm thấy chức năng an toàn không đồng bộ-tín hiệu thay thế cho flock
trong số list này.
và theo liên kết ở trên:
khi một tín hiệu ngắt một chức năng không an toàn và các tín hiệu bắt chức năng gọi một chức năng không an toàn, hành vi là undefined
Có một cách thế nào để thực hiện flock
async-signal-safe? Hoặc có giải pháp khác để thực hiện flock
khi tôi nhận được tín hiệu TERM
không?
Bản sao có thể có của [Cách tránh sử dụng printf trong trình xử lý tín hiệu?] (Https://stackoverflow.com/questions/16891019/how-to-avoid-using-printf-in-a-signal-handler) cho 'printf', https://stackoverflow.com/questions/16979059/use-flock-in-the-sigaction-handler cho' flock'. –