是在Unix中的sigaction在main
函数中仅声明一次,还是应该在我的main
调用的每个函数中声明它,所以如果在我的main
不在内部执行时出现信号,则信号处理程序将调用吗?因此,我必须在sigaction
的开头仅声明一次main()
还是在每个函数中都声明一次?
最佳答案
您不必在每个函数中都调用sigaction()
。它为给定信号设置一个(全局)信号处理程序,该信号处理程序一直保持该信号处理程序,直到您更改它为止-通过对同一信号的另一个sigaction()
调用。您可以在sigaction()
中调用main()
,但这也不是必须的。您可以在其他选定功能中调用它。
请注意,您需要为要处理的每个不同信号调用一次sigaction()
或忽略。调用循环一个信号列表并为每个信号设置适当的处理程序的函数通常是有益的。谢天谢地,您不必在调用的每个函数中都这样做!
通常,避免在同一程序中混用对signal()
和sigaction()
的调用。如果您在任何地方都使用sigaction()
,请在任何地方使用它。但是,如果您坚持要变态,那么可以在我只提到sigaction()
的第一段中使用“ signal()
或sigaction()
”。
请注意,您可以使用sigaction()
查找如何处理信号,而无需设置新的信号处理。使用signal()
,您可以(或多或少)了解信号的处理方式,但是还必须设置一个动作。与sigaction()
相比,首选signal()
的另一个原因。
请注意,我假设问题中的“声明”意味着某种形式的“呼叫”。您不要在任何函数中声明sigaction()
;您包括<signal.h>
进行声明。
关于c - 函数中的Sigaction声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55628719/