我正在做一个任务,我在 shell 中实现 unix history 命令。在我的程序中,我为 SIGINT 编写了一个信号处理程序。当用户输入 (ctrl)(c) 时,将显示他们的历史记录。
当我的程序终止时,我需要将历史记录存储在一个文件中。有没有一种简单的方法可以检测我的程序何时退出?或者我是否需要为每种类型的信号((ctrl)(d)、pausebreak 等)提供一个信号处理程序。
我正在做一个任务,我在 shell 中实现 unix history 命令。在我的程序中,我为 SIGINT 编写了一个信号处理程序。当用户输入 (ctrl)(c) 时,将显示他们的历史记录。
当我的程序终止时,我需要将历史记录存储在一个文件中。有没有一种简单的方法可以检测我的程序何时退出?或者我是否需要为每种类型的信号((ctrl)(d)、pausebreak 等)提供一个信号处理程序。
atexit()
可能是您要查找的内容,请参阅手册页:man 3 atexit
用法类似于:
#include <stdlib.h>
static void save_the_file(void)
{
/* ... */
}
int main()
{
atexit(save_the_file);
return 0;
}
另一种选择是使用destructor
属性(GCC/Clang):
static __attribute__((destructor)) void save_the_file(void)
{
/* your code */
}
atexit 就是这样。但是如果你也想关注 SIGKILL,你需要调用 waitpid() 的观察者进程。