前言:
在我们使用服务器的时候,特别是调试一些内核态程序的时候,经常会出现程序卡死而需要重启的现象,而每当这个时候我们会发现,有些进程怎么也杀不掉。 kill -9 无效,连reboot也无效,没办法只能强制下电然后上电或直接拔掉电源,但是我们要知道直接关掉电源对服务器损坏是很严重的。从每年我司每年硬盘报损的 数字就可以看出。
在使用任何办法都无法重启系统时,可以尝试下面的方法,此方法放弃保存当前运行的任何数据,直接重启,但是却对硬盘无害。具体解决方法如下:
echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger
----------------------------------------------------------------------------------------------------
下面解释下以上两条命令的含义:
1. /proc/sys/kernel/sysrq
向sysrq文件中写入1是为了开启SysRq功能。根据linux/Documentations/sysrq.txt中所说:SysRq代表的是
Magic System Request
Key。开启了这个功能以后,只要内核没有挂掉,它就会响应你要求的任何操作。但是这需要内核支持(CONFIG_MAGIC_SYSRQ选项)。向
/proc/sys/kernel/sysrq中写入0是关闭sysrq功能,写入1是开启,其他选项请参考sysrq.txt。需要注意的是,
/proc/sys/kernel/sysrq中的值只影响键盘的操作。
那么怎么使用SysRq键呢?
在x86平台上,组合键”<ALT> + SysRq + <command key>“组成SysRq键以完成各种功能。但是,在一些键盘上可能没有SysRq键。SysRq键实际上就是”Print Screen“键。并且可能有些键盘不支持同时按三个按键,所以你可以”按住ALT键“,”按一下SysRq键“,再”按一下<command key>键“,如果你运气好的话,这个会有效果的。不过放心,现在的键盘一般都支持同时按3个或3个以上的键。
<command key>有很多,这里只挑几个来说,其他的可以参考sysrq.txt文件。
‘b‘ —— 将会立即重启系统,并且不会管你有没有数据没有写回磁盘,也不卸载磁盘,而是完完全全的立即关机
‘o‘ —— 将会关机
‘s‘ —— 将会同步所有以挂在的文件系统
‘u‘ —— 将会重新将所有的文件系统挂在为只读属性
2. /proc/sysrq-trigger
从文件名字就可以看出来这两个是有关系的。写入/proc/sysrq-trigger中的字符其实就是sysrq.txt中说的<command key>键所对应的字符,其功能也和上述一样。
所以,这两行命令先开启SysRq功能,然后用‘b‘命令让计算机立刻重启。
真心希望能帮到大家,谢谢!
本文出自 “杜海强” 博客,谢绝转载!
原文地址:http://dulinux.blog.51cto.com/10803129/1743417