当我在kill()或signal()函数中使用SIGUSR1时,它在做什么?是宏吗?我读到它是用户定义的,但在哪里定义?我可以制作SIGUSR10(或以编程方式制作不同信号类型的“阵列”)吗?
最佳答案
用户定义的信号意味着与SIGSEGV
,SIGCONT
,SIGSTOP
等不同,这些信号没有明确的含义。内核永远不会将SIGUSR1或SIGUSR2发送给进程,因此您可以根据应用程序的需要来设置信号的含义。所有这些大写的SIG
常量实际上都是宏,在特定实现中,它们将扩展为指示信号编号的整数。尽管不一定需要定义用户定义的信号,但是信号编号在特定的实现中已经固定,并且可以安全地重新利用它们,因为除了用户以外,其他任何人都不会发送它们。
传统上,有两种用户定义的信号:SIGUSR1
和SIGUSR2
。但是,最近的实现有一种叫做“POSIX实时信号”的东西,它提供了更多的用户定义的信号。