为什么syslog文件中的内核日志消息(或重定向到终端的文件)恰好是一个'消息'?

时间:2012-07-08 11:16:35

标签: linux linux-kernel syslog

我在Ubuntu 10.04机器上写了一个简单的hello-world模块。在加载和卸载模块时,printk应该记录来自以下hello_world和bye_world函数的消息。

static int hello_world()
{
        printk(KERN_INFO "Hello, beautiful world");
        return 0;
}

static void bye_world()
{
        printk(KERN_INFO "Good-bye kernel uncle");
}

module_init(hello_world);
module_exit(bye_world);

但是,当实际插入和删除hello.ko模块时,我看到终端上打印的消息(我将其重定向到当前终端)正好是一条消息。

# rmmod hello.ko
# Jul  8 16:34:02 panchavati kernel: [64599.954113] Hello, beautiful world

# insmod hello.ko
# Jul  8 16:34:57 panchavati kernel: [65456.367422] Good-bye kernel uncle

从dmesg输出,我可以看到已经记录了下一个消息条目(对应于insmod),只是它还没有被打印。

chanakya@panchavati:~$ dmesg | tail -2
[65456.367422] Good-bye kernel uncle
[65511.198299] Hello, beautiful world

内核日志中有条目[65511.198299],但只打印了上一个条目[65456.367422] Good-bye kernel uncle。为什么会这样?

我之前认为/etc/syslog.conf中使用的'-' specifier可能必须对此做一些事情(它会在每次写入后阻止同步),但删除它也不起作用。

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用tailf(或tail -f)?它会在邮件到达时打印出来。例如:

    tailf /var/log/messages

答案 1 :(得分:1)

尝试使用换行符结束字符串(" \ n")。