我可以在glibc / linux的信号(SIGALRM)处理程序中使用fprintf(stderr)
吗?
答案 0 :(得分:6)
不,你不能。检查联机帮助页signal(7)以获取异步信号安全功能列表。 fprintf
未包含在该列表中。
如果您不需要格式化,则可以使用write(STDERR_FILENO, <buf>, <buflen>)
写入stderr。
答案 1 :(得分:4)
这不安全,引用了IBM DeveloperWorks关于Signal Handling Safety
假设信号处理程序使用fprintf打印一条消息,并且当信号传递时,程序正在使用相同的流进行fprintf调用。信号处理程序的消息和程序的数据都可能被破坏,因为两个调用都在相同的数据结构上运行:流本身。