我有一个小程序可以打开一个文件并对其进行一些操作。我将文件关闭订阅到程序终止如下:
static
void exit_handler (int ev, void *arg)
{
fprintf(stderr, "bye %d\n", WEXITSTATUS(ev));
fclose((FILE *)arg);
}
int main (int argc, char *argv[])
{
FILE *out;
...
out = fopen(argv[1], "wt");
if (out == NULL) {
perror("Opening output file");
exit(EXIT_FAILURE);
}
on_exit(exit_handler, out);
...
}
Run Code Online (Sandbox Code Playgroud)
尝试执行此操作时,我注意到只有在程序正常终止时它才能正常工作。在CTRL+ C( SIGINT) 的情况下,exit_handler不执行回调。
这不是很奇怪吗?我应该将exit(EXIT_FAILURE)调用关联到信号处理程序SIGTERM吗?在这种情况下,最佳做法是什么?
on_exit不会为SIGTERM信号调用。您需要为它添加一个处理程序signal。例如:
void signalHandler(void)
{
...
}
int main(void)
{
signal(SIGTERM, signalHandler);
}
Run Code Online (Sandbox Code Playgroud)
还要注意,SIGKILL不能被设计捕获。