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();
}
次sigaction
ハンドラ関数を持っている人はflock
とprintf
は、非同期シグナルセーフではありませんと言ってくれました。そして、私はこのlistでflock
の代替非同期シグナルセーフ機能を見つけることができませんでした。
して上記のリンクによるとは:
信号が安全機能と信号を引く 機能は危険な関数を呼び出しを中断し、動作が
は仕方あります定義されていませんflock
async-signal-safeを作るには?それとも私がTERM
信号を受信したときflock
を実行するための別の解決策はありますか?
の可能性のある重複した[シグナルハンドラ内でのprintfを使用して回避する方法?](https://stackoverflow.com/questions/16891019/how-to-avoid-using-printf-in-a-signal-handler)について'flock'ため' printf'、https://stackoverflow.com/questions/16979059/use-flock-in-the-sigaction-handler。 –