【发布时间】:2013-06-02 17:06:48
【问题描述】:
我有一个用 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 代码中是否缺少某些内容?
【问题讨论】:
-
如果您在信号处理程序中取出所有非法代码,您将留下
if (rc) { char* piderr = "..."; }