C-SIGUSR1在语法上到底是什么

C-SIGUSR1在语法上到底是什么,c,signals,kill,C,Signals,Kill,当我在kill()或signal()函数中使用SIGUSR1时,它在做什么?它是宏吗?我读到它是用户定义的,但它是在哪里定义的?我可以制作一个SIGUSR10(或通过编程制作一个不同信号类型的“数组”)吗?顾名思义,SIGUSR是为用户(开发人员)保留的信号,没有任何“特殊”预定义的含义。你不能制造10个,在大多数POSIX系统上,只有两个——SIGUSR1和SIGUSR2 符号本身可能是宏扩展,也可能不是宏扩展,但最终将成为与int兼容的数值赋值 要以有意义的方式使用它,您需要编写一个信号处理

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

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

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


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

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


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

它可能是在
或其中包含的一个文件中定义的。您无法自行移植。
SIGUSR1
是“用户定义”的,因为实现从不生成
SIGUSR1
本身(而诸如
SIGHUP
SIGINT
SIGQUIT
SIGPIPE
SIGTERM
等信号有时是由系统生成的)。实际上,:标题应定义以下宏,用于引用系统中出现的信号。此处定义的信号以字母
SIG
开头,后跟大写字母。宏应扩展为具有类型
int
和不同值的正整数常量表达式。所以信号名应该是宏。