【发布时间】:2021-03-22 01:15:39
【问题描述】:
我的代码如下所示:
//global variables
void signal_handler() {
//deallocation of global variables
free(foo);
close(foo_2);
exit(0);
}
int main () {
signal(SIGINT, signal_handler);
//irrelevant code
}
如您所见,我将CTRL+C 中断更改为执行一次signal_handler 函数,而不是立即终止进程。我在某处读到,某些函数(例如 free)不是异步安全的,并且不会在 signal_handler 中执行,但我不确定。
我可以在信号处理程序中执行free、close、exit 甚至pthread_join 之类的函数吗?
【问题讨论】:
-
没有。 asdfasdfasfsadfas
-
你在编写什么样的软件?一些网络事物、一些科学代码(例如CAD 软件)或一些驱动核导弹的 C 代码?当您的软件崩溃时,您会发生什么?
-
这和How to avoid using
printf()in a signal handler?基本是同一个问题。有一个可以在信号处理程序中调用的函数列表(close()是一个,但fclose()不是;free()和exit()都不是,但您可以安全地调用_exit()或_Exit();pthread_join()不能从信号处理程序中调用)。