【发布时间】:2019-03-29 13:04:35
【问题描述】:
是否可以在 Linux 系统上触发用 C 编写的应用程序的“干净”关闭? “干净”是指用于取消初始化接口等的解决方案。就像 C++ 中对象的析构函数,但对于我的 C 应用程序。
我知道可以使用 systemd 关闭服务,但我的应用程序不是服务。我正在使用 systemd.service 来启动我的应用程序,但就我对 systemd 服务的理解而言,应用程序本身被认为是一次性的(一开始有一个初始化,然后进入 while (1) 循环)。
是否可以使用 systemd 或类似的 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。但我认为这太容易了。
【问题讨论】:
-
这个程序的目的是什么?它应该解决什么问题?它应该运行多长时间?结束的条件是什么?
-
也许
man 3 signal有帮助。 -
它会计算 pi,直到系统告诉它停止(类似于 systemds ExecStop?),然后它会打印出它能够计算的位数以及花了多长时间。它结束的条件是系统关闭或另一个应用程序试图更新可执行文件。
-
这个应用程序的确切目的是一篇更长的文章,因此是计算 pi 的摘要。
-
好吧,系统关闭我认为真的没有必要做任何事情,它应该让自己被杀死(无论如何结果在那一刻并不有趣)。要呈现当前结果,您可以捕获
SIGUSR1或SIGUSR2信号之一,然后继续处理。为了退出并展示当前结果,SIGINT怎么样?