linux内核打印"BUG: scheduling while atomic"和"bad: scheduling from the idle thread"错误的时候, 通常是在中断处理函数中调用了可以休眠的函数,如semaphore,mutex,sleep之类的可休眠的函数, 而linux内核要求在中断处理的时候,不允许系统调度,不允许抢占,要等到中断处理完成才能做其他事情. 因此,要充分考虑中断处理的时间,一定不能太久. 另外一个能产生此问题的是在idle进程里
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的. 在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈. int backtrace(void **buffer,int size) /*judge whether process is exist*/bool processExists(char * process
#!/bin/bash # list a content summary of a number of RPM packages # USAGE: showrpm rpmfile1 rpmfile2 ... # EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm for rpmpackage in "$@"; do if [ -r "$rpmpackage" ];then echo "=============== $rpm