是否有可能在Linux系统上触发用C编写的应用程序的“干净”关闭? “干净”是指解除对接口等的初始化的解决方案。就像C ++中对象的析构函数一样,但对于我的C应用程序。
我知道可以使用systemd关闭服务,但我的应用程序不是服务。我正在使用systemd.service启动我的应用程序,但就我理解的systemd服务而言,应用程序本身被视为onehot(在开始时进行初始化然后进入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.但我认为这太容易了。
SA_RESTART
中没有.sa_flags
标志)用于应该杀死应用程序而不跳过清理代码的信号。sig_atomic_t
标志(或清除你的keepRunning
标志,但通常相反,以便你可以使用它来记录信号编号)。EINTR
或在任何其他时间,检查标志并开始失败,如果它已设置。 (即,如果在C中,或者在C ++中抛出异常,则开始返回失败信令返回值。)