0

Unix 中的 sigaction 是否只在main函数中声明一次,或者我应该在我main调用的每个函数中声明它,所以如果在执行不在 my 内部时main出现信号,信号处理程序将调用?那么,我必须sigaction在开始时只声明一次main()还是必须在每个函数中声明它?

4

1 回答 1

1

您不必调用sigaction()每个函数。它为给定的信号设置一个(全局)信号处理程序,该信号处理程序一直是信号处理程序,直到您更改它——通过sigaction()对同一信号的另一个调用。你可以打电话sigaction()main()但这也不是强制性的。您可以在选定的其他功能中调用它。

请注意,您需要为sigaction()要处理或忽略的每个不同信号调用一次。调用一个循环遍历信号列表的函数通常是有益的,为每个信号设置适当的处理程序。谢天谢地,您不必在调用的每个函数中都这样做!

一般来说,避免在同一个程序中混合调用signal()和调用。sigaction()如果您在任何地方使用,请在sigaction()任何地方使用它。但是,如果您坚持要变态,则可以在我仅提到的第一段中使用“sigaction()或” 。signal()sigaction()

请注意,您可以sigaction()在不设置新的信号处理的情况下了解如何处理信号。您可以(signal()或多或少地)了解信号的处理方式,但您还必须设置一个操作。只是另一个喜欢sigaction()的理由signal()

请注意,我假设问题中的“声明”意味着某种形式或形式的“呼叫”。您没有sigaction()在任何函数中声明;你包括<signal.h>声明它。

于 2019-04-11T09:13:53.513 回答