【问题标题】:Is there a way to pipe an output constructed of printk messges to grep on console?有没有办法将由 printk 消息构造的输出通过管道传输到控制台上的 grep?
【发布时间】:2020-03-10 00:03:04
【问题描述】:

我创建了一个使用 printk 打印输出的实用程序。例如。

printmsg.c:
void main() {
     printk(KERN_DEBUG "Message alert id:XXXX!\n");
     printk(KERN_DEBUG "Message alert id:YYYY!\n");
     return;
}

如果在系统上运行此实用程序,它会在控制台上打印如下消息

#./printmsg
Message alert id:XXXX!
Message alert id:YYYY!

然而,如果我运行这个应用程序将输出通过管道传输到 grep,它就不起作用了。

#./printmsg | grep XXXX
Message alert id:XXXX!
Message alert id:YYYY!

我知道 printk 消息到内核日志缓冲区和 dmesg 打印日志缓冲区。使用 dmesg 选项在 stdoutput 上打印输出。

但是,我正在寻找一种在实用程序运行并且输出转储到控制台时立即将输出通过管道传输到 grep 的选项。

限制:printk 不能在这里妥协。

【问题讨论】:

    标签: linux grep console pipe printk


    【解决方案1】:

    你需要用这种方式构建你的shell脚本:

    #./printmsg 2>&1| grep XXXX
    

    这是因为(很有可能)printk 函数将消息发送到 STDERR,而不是 STDOUT

    【讨论】:

    • printk 进入内核环形缓冲区,不像 printf 进入 stdout 或 stderr。 2>&1 在我的情况下不起作用/不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    相关资源
    最近更新 更多