2012-07-08 47 views
1

我在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模塊時,我看到打印的終端(I它重定向到當前終端)上的消息是恰好一個消息的後面。

# 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的輸出,I可以看到下一個消息條目(對應於用insmod)已被已經登錄,只是它沒有被打印尚未。

[email protected]:~$ 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

您是否嘗試過使用tailf(或tail -f)?它會在消息到達時打印出來。例如:

tailf /var/log/messages 
1

嘗試用換行符(「\ n」)結束字符串。