我们可以传递给printk的许多参数:
printk (KERN_INFO "blahahaha");
printk (KERN_EMERG "bababa");
等等。这些标签是否与syslog.conf中的设施级别有关? KERN_EMERG要打印到“kern.emerg”指定的设施吗?这两个实体是如何捆绑的?
由于
答案 0 :(得分:1)
按顺序排列:
这些标签是否与
syslog.conf
中的设施级别有关?
是。该标记实际上是一对,KERN
EMERG
,即KERN
工具和EMERG
级别 - 它们是大写的,因为它是一个预处理器宏,按惯例以大写字母书写。 Linux内核只关心KERN
工具,因此未定义其他工具。
所有这些printk
命令都会记录到内部内核环缓冲区。根据您的内核设置,此消息可能会也可能不会复制到控制台(可能是屏幕或串行终端)。
KERN_EMERG会打印到“kern.emerg”指定的设施吗?
假设您的意思是登录到与kern.emerg
匹配的文件,那么是。 syslog.conf
中符合此条目的条目示例为kern.*
,kern.emerg
,*.emerg
。级别emerg
的消息被视为致命,即发生了严重错误。
来自此级别的内核的消息可能不会以syslog文件结尾,因为该错误可能会阻止将数据写入硬盘驱动器。
这两个实体是如何捆绑的?
有一个辅助守护程序,通常称为klogd
。它接受来自内核环形缓冲区的输出,默认情况下将它们传递给syslogd
,并根据syslog.conf
文件记录它们。
总结如下:
printk
将邮件放入ring buffer
。 ring buffer
由klogd
读取,syslogd
将其转发给Syslogd
。 syslogd.conf
将此数据记录到{{1}}文件指定的目标中。