C- SIGUSR1究竟是什么语法

use*_*234 6 c signals kill

当我在kill()或signal()函数中使用SIGUSR1时,它在做什么?这是一个宏吗?我读到它是用户定义的,但它在哪里定义?我可以制作一个SIGUSR10(或以编程方式制作不同信号类型的"阵列")吗?

pho*_*xis 11

用户定义的信号,意味着这些信号具有不同于没有一定的含义SIGSEGV,SIGCONT,SIGSTOP,等内核永远都不会发送SIGUSR1或SIGUSR2的过程,所以信号的含义可以通过你按你的应用程序的需要进行设置.所有这些大写SIG常量实际上都是宏,它将扩展为一个整数,表示特定实现中的信号编号.尽管不一定需要定义用户定义的信号,但是信号编号已经在特定实现中被修复,并且它们可以安全地重新使用,因为除了用户之外不会发送任何信号.

传统上,有两个用户定义的信号:SIGUSR1SIGUSR2.然而,最近的实现具有称为"POSIX实时信号"的东西,其提供了几个用户定义的信号.


Bad*_*Zen 6

SIGUSR,顾名思义,是保留给用户(开发者)使用的信号,没有任何“特殊”的预定义含义。您不能创建 10 个,在大多数 POSIX 系统上只有两个 - SIGUSR1 和 SIGUSR2。

符号本身可能是也可能不是宏扩展,但最终将成为与 int 兼容的数值分配。

要以有意义的方式使用它,您需要编写一个信号处理程序。有关如何执行此操作的详细信息,请参阅 signal() 联机帮助页。

  • 实际上,[POSIX 定义](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html#tag_13_43): _<signal.h> 标头应定义以下用于引用的宏系统中出现的信号。此处定义的信号以字母“SIG”开头,后跟一个大写字母。宏应扩展为“int”类型和不同值的正整数常量表达式。_ 因此信号名称应该是宏。 (4认同)