是否可以在Linux系统上触发用C编写的应用程序的“干净”关闭? “干净”是指用于取消初始化接口等的解决方案。类似于C ++中对象的析构函数,但适用于我的C应用程序。
我知道可以使用systemd关闭服务,但是我的应用程序不是服务。我正在使用systemd.service来启动我的应用程序,但是据我所了解的systemd服务,应用程序本身被认为是一个单例(开始时进行了初始化,然后进入了while(1)循环)。
是否可以使用系统化或类似的Linux功能打破循环?解决此问题的“标准”解决方案是什么?
int main (int argc, char **argv){
// ... some initialization
printf("Warming up!\n);
while(keepRunning){
// do stuff
printf("Running!!\n");
}
// de-initialize
printf("By by\n");
}
我希望systemd将keepRunning的值更改为0。但是我认为这太容易了。
答案 0 :(得分:0)
SA_RESTART
中没有.sa_flags
标志的情况下),这些信号处理程序应在不跳过清理代码的情况下杀死应用程序。sig_atomic_t
标志(或清除您的keepRunning
标志,但通常采用另一种方法,以便您可以使用它来记录信号编号)。EINTR
或其他任何时间时,请检查该标志并开始失败(如果已设置)。
(即,如果在C语言中开始返回失败信号通知返回值,或者在C ++中可能引发异常。)