当我在kill()或signal()函数中使用SIGUSR1时,它在做什么?这是一个宏吗?我读到它是用户定义的,但它在哪里定义?我可以制作一个SIGUSR10(或以编程方式制作不同信号类型的"阵列")吗?
pho*_*xis 11
用户定义的信号,意味着这些信号具有不同于没有一定的含义SIGSEGV,SIGCONT,SIGSTOP,等内核永远都不会发送SIGUSR1或SIGUSR2的过程,所以信号的含义可以通过你按你的应用程序的需要进行设置.所有这些大写SIG常量实际上都是宏,它将扩展为一个整数,表示特定实现中的信号编号.尽管不一定需要定义用户定义的信号,但是信号编号已经在特定实现中被修复,并且它们可以安全地重新使用,因为除了用户之外不会发送任何信号.
传统上,有两个用户定义的信号:SIGUSR1和SIGUSR2.然而,最近的实现具有称为"POSIX实时信号"的东西,其提供了几个用户定义的信号.
SIGUSR,顾名思义,是保留给用户(开发者)使用的信号,没有任何“特殊”的预定义含义。您不能创建 10 个,在大多数 POSIX 系统上只有两个 - SIGUSR1 和 SIGUSR2。
符号本身可能是也可能不是宏扩展,但最终将成为与 int 兼容的数值分配。
要以有意义的方式使用它,您需要编写一个信号处理程序。有关如何执行此操作的详细信息,请参阅 signal() 联机帮助页。