我创建了一个实用程序,可以使用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不能在这里妥协。
您需要以这种方式构建您的shell脚本:
#./printmsg 2>&1| grep XXXX
这是因为(很有可能(printk
函数向STDERR发送消息,而不是STDOUT