如信号(7)的手册页中所述, Interruption of system calls and library functions by signal handlers
If a signal handler is invoked while a system call or library function call is blocked, then either:
* the call is automatically restarted after the signal handler returns; or
* the call f
我是内核编程的新手,我正在对Linux驱动程序进行更改。我想在临界区阻塞/等待用户输入(驱动程序和用户空间应用程序工作之间的通信)。问题是,当我使用wait_event_timeout()时,系统崩溃了,我得到了BUG: scheduling while atomic: swapper。有谁知道如何解决这个问题,并能给我一些建议,从哪里开始呢?
我使用基于Poky的Yocto创建了一个定制的嵌入式Linux发行版。我正在使用SysVInit实用程序。当我们重新启动系统时,所有的rc6脚本都会被调用。几乎在最后都会调用/etc/init.d/sendsigs脚本。此脚本首先向所有正在运行的进程发送SIGTERM信号并休眠5秒,然后向所有其余进程发送SIGKILL信号。我看到的问题是,当我重新启动系统时,脚本发送SIGTERM信号并休眠5秒钟,但休眠后没有唤醒,因此它不发送SIGTERM并挂起系统,导致系统不重新启动。以下是/etc/init.d/sendsigs脚本
echo "Sending TERM signal...
好的,对于我的编程任务(是的,我们都可以求助于任何我们认为合适的资源),我必须找出进程在阻塞/休眠/运行上花费了多少时间。
我的第一个尝试是创建一个bash脚本...它看起来像这样:
for i in `ls /proc/ | egrep [0-9]+`
do
cat /proc/$i/status | grep State
done
但是所有的问题都报告了休眠状态。另外,这种方法需要我疯狂地投票……所以运行测试可能会改变结果...(呃)
现在,使用syscall或跟踪进程状态的方法编译新版本的linux也不是不可能的。我唯一担心的是试图找出如何跟踪进程状态的变化,并确保我不会