我有一个程序可以创建许多线程并运行,直到电源关闭到嵌入式计算机,或者用户使用kill或ctrlc终止进程.
这是一些代码以及main()的外观.
static int terminate = 0; // does this need to be volatile?
static void sighandler(int signum) { terminate = 1; }
int main() {
signal(SIGINT, sighandler);
// ...
// create objects, spawn threads + allocate dynamic memory
// ...
while (!terminate) sleep(2);
// ...
// clean up memory, close threads, etc.
// ...
signal(SIGINT, SIG_DFL); // is this necessary?
}
Run Code Online (Sandbox Code Playgroud)
我想知道一些事情:
是否需要任何信号处理?
我在这个帖子中读到了"Linux C catch kill信号以便正常终止",显然操作系统会为我处理清理工作.因此,我可以只用无限循环替换信号处理程序,让操作系统优雅地退出线程,取消分配内存等吗?
关于清洁终止,我还需要关注其他任何信号吗?这个主题"SIGINT如何与其他终止信号相关?" ,列出我可能关注的所有信号,但有多少实际需要处理是有用的?
我的示例中的terminate变量是否必须是volatile?我已经看到很多这个变量是易变的例子,而其他的变量则不是.
我已经读过, …