C- SIGUSR1究竟是什么语法

时间:2014-09-09 04:19:23

标签: c signals kill

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

2 个答案:

答案 0 :(得分:11)

用户定义的信号意味着这些信号与SIGSEGVSIGCONTSIGSTOP等不同,没有明确的含义。内核永远不会向进程发送SIGUSR1或SIGUSR2,因此意义根据您的应用需求,您可以设置信号。所有这些大写SIG常量实际上是宏,它将扩展为一个整数,表示特定实现中的信号编号。虽然用户定义的信号不一定需要定义,但信号编号已在特定实现中修复,并且可以安全地重新使用它们,因为它们不会被除用户以外的任何内容发送

传统上,有两个用户定义的信号:SIGUSR1SIGUSR2。然而,最近的实现有一种称为“POSIX实时信号”的东西,它提供了几个用户定义的信号。

答案 1 :(得分:4)

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

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

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