zoukankan      html  css  js  c++  java
  • linux printk函数学习

    printk与printf的区别在于:
    printk运行在kernel space,而printf运行在user space。
    所以kernel打印log使用printk,而应用程序打印log使用printf。

    在printk.h中定义了8个级别的log level,
    #define KERN_EMERG "<0>"
    #define KERN_ALERT "<1>"
    #define KERN_CRIT "<2>"
    #define KERN_ERR "<3>"
    #define KERN_WARNING "<4>"
    #define KERN_NOTICE "<5>"
    #define KERN_INFO "<6>"
    #define KERN_DEBUG "<7>"

    通过如下命令,可以查看系统当前设定的printk log level。
    从结果中我们看到,系统当前设定的log level为0,所以不会
    打印任何log到console上。
    sh-# cat /proc/sys/kernel/printk
    0       4       1       7

    此时要查看系统打印的log的话,有两种方法:
    1. 使用dmesg命令将ring buffer中的内容保存起来;
    sh-# dmesg > /tmp_fs/dmesg.txt
    2. 将/proc/kmsg里面的内容保存起来
    sh-# cat /proc/kmsg > /tmp_fs/dmesg.txt
    有了上面这两种办法,再也不会因为一不小心没有保存控制台上的log而烦恼了。

    那printk level应该如何设定呢?这里有两种办法:
    1. 使用dmesg命令进行设定,
    sh-# cat /proc/sys/kernel/printk
    0       4       1       7
    sh-# dmesg -n 7
    sh-# cat /proc/sys/kernel/printk
    7       4       1       7
    2. 直接更改printk配置文件,
    sh-# echo 1 > /proc/sys/kernel/printk
    sh-# cat /proc/sys/kernel/printk
    1       4       1       7

    因为linux系统过程中会打印较多的系统log,所以一定要在系统启动前就设定好printk level。

    刚通过实验验证了,printk level只会影响到kernel log是否输出到控制台上;
    但是无论printk level如何,kernel log都会保存到ring buffer中。

    问题:
    将printk level设定为KERN_DEBUG,这样开机过程中会输出大量的log,
    会不会影响到系统开机性能呢?
    需要通过实验进行验证。

  • 相关阅读:
    响应式设计的 5 个 CSS 实用技巧
    iframe的高度自适应的方法
    HDOJ1285 比赛排名(拓扑排序)
    GENIA项目GENIA语料库
    HDOJ1102 修路问题(最小生成树Prim)
    二叉树的一些操作
    GENIA项目综述论文(E99)
    GENIA项目主页
    读《统计自然语言处理》有笔记——语料库与知识词汇库
    HDOJ2535 ( Vote ) 【水题】
  • 原文地址:https://www.cnblogs.com/riskyer/p/3348020.html
Copyright © 2011-2022 走看看