C で開発されたプログラムがあります。プログラムを終了する前にいくつかの C コードを実行するために、このプログラムに 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);
}
exit(EXIT_SUCCESS);
}
int main(int argc, char **argv)
{
struct sigaction sigint_action;
sigint_action.sa_handler = &signal_term_handler;
sigemptyset(&sigint_action.sa_mask);
sigint_action.sa_flags = SA_RESETHAND;
sigaction(SIGTERM, &sigint_action, NULL);
...........
}
注:私のプログラムには、実行中の2つのサブスレッドが含まれています
myprogram を実行してから、プログラムを強制終了するために呼び出しますkill -15 <pidnumber>
。メッセージ"EXIT :TERM signal Received!\n
" stdout に出力されますが、プログラムは終了しません。
sigaction コードに何か不足していますか?