尽管内核代码的大部分 bug 以 oops 消息结束, 有时候它们可能完全挂起系统. 如果系 统挂起, 没有消息打印. 例如, 如果代码进入一个无限循环, 内核停止调度,[15]15 并且系 统不会响应任何动作, 包括魔术 Ctrl-Alt-Del 组合键. 你有 2 个选择来处理系统挂起-

- 或者事先阻止它们, 或者能够事后调试它们.

你可阻止无限循环通过插入 schedule 引用在战略点上. schedule 调用( 如你可能猜到 的 )调度器, 因此, 允许别的进程从当前进程偷取 CPU 数据. 如果一个进程由于你的驱 动的 bug 而在内核空间循环, schedule 调用使你能够杀掉进程在跟踪发生了什么之后.

你应当知道, 当然, 如何对 schedule 的调用可能创造一个附加的重入调用源到你的驱动, 因为它允许别的进程运行. 这个重入正常地不应当是问题, 假定你在你的驱动中已经使用 了合适的加锁. 然而, 要确认在你的驱动持有一个自旋锁的任何时间不能调用 schedule.

如果你的驱动真正挂起了系统, 并且你不知道在哪里插入 schedule 调用, 最好的方式是 加入一些打印消息并且写到控制台(如果需要, 改变 console_loglevel 值).

有时候系统可能看来被挂起, 但是没有. 例如, 这可能发生在键盘以某个奇怪的方式保持 锁住的时候. 这些假挂起可通过查看你为此目的运行的程序的输出来检测. 一个你的显示 器上的时钟或者系统负载表是一个好的状态监控器; 只要他继续更新, 调度器就在工作.

对许多的上锁一个必不可少的工具是"魔术 sysrq 键", 在大部分体系上都可用. 魔键 sysrq 是 PC 键盘上 alt 和 sysrq 键组合来发出的, 或者在别的平台上使用其他特殊键 (详见 documentation/sysrq.txt), 在串口控制台上也可用. 一个第三键, 与这 2 个一 起按下, 进行许多有用的动作中的一个:

r 关闭键盘原始模式; 用在一个崩溃的应用程序( 例如 X 服务器 )可能将你的键盘搞成 一个奇怪的状态.

k 调用"安全注意键"( SAK ) 功能. SAK 杀掉在当前控制台的所有运行的进程, 给你一个 干净的终端.

s 进行一个全部磁盘的紧急同步.

u umount. 试图重新加载所有磁盘在只读模式. 这个操作, 常常在 s 之后马上调用, 可 以节省大量的文件系统检查时间, 在系统处于严重麻烦时.

b boot. 立刻重启系统. 确认先同步和重新加载磁盘. p 打印处理器消息.

t 打印当前任务列表. m 打印内存信息.

实际上, 多处理器系统仍然在其他处理器上调度, 甚至一个单处理器的机器可能重新调度, 如果内核抢占被使能.

然而, 对于大部分的通常的情况( 单处理器不使能抢占), 系统一起停止调度.

有别的魔术 sysrq 功能存在; 完整内容看内核源码的文档目录中的 sysrq.txt. 注意魔 术 sysrq 必须在内核配置中显式使能, 大部分的发布没有使能它, 因为明显的安全理由. 对于用来开发驱动的系统, 然而, 使能魔术 sysrq 值得为它自己建立一个新内核的麻烦. 魔术 sysrq 可能在运行时关闭,

使用如下的一个命令:

echo 0 > /proc/sys/kernel/sysrq

如果非特权用户能够接触你的系统键盘, 你应当考虑关闭它, 来阻止有意或无意的损坏. 一些以前的内核版本缺省关闭 sysrq, 因此你需要在运行时使能它, 通过向同样的

/proc/sys 文件写入 1.

sysrq 操作是非常有用, 因此它们已经对不能接触到控制台的系统管理员可用. 文件

/proc/sysrq-trigger 是一个只写的入口点, 这里你可以触发一个特殊的 sysrq 动作, 通过写入关联的命令字符; 接着你可收集内核日志的任何输出数据. 这个 sysrq 的入口 点是一直工作的, 即便 sysrq 在控制台上被关闭.

如果你经历一个"活挂",

就是你的驱动粘在一个循环中, 但是系统作为一个整体功能正常, 有几个技术值得了解. 经常地, sysrq p 功能直接指向出错的函数. 如果这个不行, 你还 可以使用内核剖析功能.

建立一个打开剖析的内核, 并且用命令行中 profile=2 来启动 它. 使用 readprofile 工具复位剖析计数器, 接着使你的驱动进入它的循环. 一会儿后,

使用 readprofile 来看内核在哪里消耗它的时间. 另一个更高级的选择是 oprofile, 你 可以也考虑下. 文件

documentation/basic_profiling.txt 告诉你启动剖析器所有需要 知道的东西.

在追逐系统挂起时一个值得使用的防范措施是以只读方式加载你的磁盘(或者卸载它们). 如果磁盘是只读或者卸载的, 就没有风险损坏文件系统或者使它处于不一致的状态. 另外 的可能性是使用一个通过 NFS, 网络文件系统, 来加载它的全部文件系统的计算机, 内核 的"NFS-Root"功能必须打开, 在启动时必须传递特殊的参数. 在这个情况下, 即便不依靠 sysrq 你也会避免文件系统破坏, 因为文件系统的一致有 NFS 服务器来管理, 你的设备 驱动不会关闭它.

linux 挂起 移动电脑,linux 系统挂起相关推荐

  1. 服务器挂游戏用什么系统,挂游戏用什么云服务器

    挂游戏用什么云服务器 内容精选 换一换 待挂载的磁盘与弹性云服务器属于同一可用分区.如果是非共享盘,待挂载的磁盘为"可用"状态.如果是共享盘,待挂载的磁盘为"正在使用&q ...

  2. 调试Linux系统挂起和休眠问题的最佳实践

    概述 当谈到Linux系统的挂起/休眠时, 我们指的是以下三种受支持的Linux系统休眠状态: STI(Suspend To Idle)是一种通用的.纯软件.轻量级系统睡眠状态.与特定于平台的驱动程序 ...

  3. linux系统挂装什么意思,linux 挂载详解

    linux 挂载详解 发布时间:2009-06-10 00:16:54   作者:佚名   我要评论 linux是一个优秀的开放源码的操作系统,可以运行在大到巨型小到掌上型各类计算机系统上,随着lin ...

  4. linux应用程序抢占键盘,linux 系统挂起

    尽管内核代码的大部分 bug 以 oops 消息结束, 有时候它们可能完全挂起系统. 如果系 统挂起, 没有消息打印. 例如, 如果代码进入一个无限循环, 内核停止调度,[15]15 并且系 统不会响 ...

  5. linux 系统自动挂起,linux 系统挂起

    尽管内核代码的大部分 bug 以 oops 消息结束, 有时候它们可能完全挂起系统. 如果系 统挂起, 没有消息打印. 例如, 如果代码进入一个无限循环, 内核停止调度,[15]15 并且系 统不会响 ...

  6. linux关闭xorg日志,linux – 挂起后在Xorg环境中恢复键盘设置

    我没有像Gnome或KDE那样使用巨大的DE,并且使用xset命令更改键盘速率: xset r rate 250 70 但是在系统挂起(通过pm-suspend)之后,此设置将丢失,因为udev会删除 ...

  7. linux下需要将nas盘挂

    linux下需要将nas盘挂在到系统中:  方法:  首先创建一个挂载目录: mkdir /mnt/nas 安装smbclient包 yum install samba samba-client sa ...

  8. linux挂nas盘步骤,linux下需要将nas盘挂

    linux下需要将nas盘挂在到系统中: 方法: 首先创建一个挂载目录: mkdir /mnt/nas 安装smbclient包 yum install samba samba-client samb ...

  9. linux关机 hibernate,实现Linux休眠(sleep/hibernate)和挂起(suspend)

    系统要求: 1.配置并编译内核:kernel2.6 2.软件:hibernate 测试环境: 1.系统Debian testing etch 2.桌面:fluxbox 3.Thinkpad r40 细 ...

最新文章

  1. R语言入门第六集 实验五:综合应用
  2. ML之LiRDNNEL:基于skflow的LiR、DNN、sklearn的RF对Boston(波士顿房价)数据集进行回归预测(房价)
  3. php登录注册demo,PHP实现登录功能DEMO
  4. html标签中lang属性及xml:lang属性的作用
  5. 一次有趣的XSS漏洞挖掘分析(1)
  6. 在ubuntu 16.04上安装tensorflow,并测试成功
  7. UNIX时间戳及日期的转换与计算
  8. 寺库商用区块链落地,联盟链为每件奢侈品发“×××”
  9. c++读取和写入TXT文件的整理 1
  10. 2020-11-18 Ubuntu 安装 Chrome
  11. 【转载】微信小程序中引入iconfont阿里矢量图库
  12. php 做批量打印二维码,php语言开发的网站,如何实现批量打印快递单的功能?
  13. 【懒懒】我不生产笑话,我只是笑话的搬运工 [问题点数:200分]
  14. git push时报错: hook declined to update refs/heads/detail-header
  15. 《周志明的软件架构课》学习笔记 Day15
  16. word2vec的经验总结
  17. 利用python进行数据分析_从删库到跑路
  18. MOOC(幕课)的到来!
  19. 智微JMS901量产工具软件+固件,JMS901双接口U盘成功量产教程分享
  20. PMP备考指南之第八章:项目质量管理

热门文章

  1. 访问SAP时提示报错SAP GUI for Windows 720窗口
  2. 细说伟哥那些你不知道的神奇用途
  3. ABAP程序性能优化
  4. OO实现ALV TABLE 九:ALV的事件
  5. python输出指定范围素数_怎么用python输出指定范围内的质数?
  6. springboot获取原生js请求_springboot跳转原生html
  7. (pwn) C语言 write函数且使用write函数泄露 libc版本
  8. 网络安全比赛理论答题(六)
  9. BUUCTF(pwn)hgame2018_flag_server(简单的栈溢出)
  10. CTF杂项之“维吉尼亚密码”