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 モジュールを挿入して削除すると、端末に出力されたメッセージ (現在の端末にリダイレクトしたもの) がちょうど 1 メッセージ遅れていることがわかります。

# 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 で使用されている「-」指定子がこれを処理する必要があるのではないかと考えていましたが (書き込みのたびに同期が妨げられます)、削除しても機能しませんでした。

4

2 に答える 2

2

tailf(またはtail -f)を使用してみましたか?到着時にメッセージを印刷します。例えば:

    tailf /var/log/messages
于 2012-09-07T02:58:10.863 に答える
1

文字列を改行 ("\n") で終わらせてみてください。

于 2015-04-07T23:05:03.627 に答える