0

我创建了一个使用 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 不能在这里妥协。

4

1 回答 1

0

您需要以这种方式构建您的 shell 脚本:

#./printmsg 2>&1| grep XXXX

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

于 2020-03-10T07:35:16.197 回答