我有一个用 C 开发的程序。我在这个程序中添加了一个 sigaction 处理程序,以便在退出程序之前执行一些 C 代码:
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
“打印的消息,但程序没有退出。
我的 sigaction 代码中是否缺少某些内容?