JF Linux Kernel 2.2 Documentation: /usr/src/linux/Documentation/sysrq.txt

sysrq.txt

カーネルハックに役立つSysRqキーについての解説 [プレインテキスト版]


			神秘のSYSRQキー文書 v1.2
                     ------------------------------------
                        [Sat May 16 01:09:21 EDT 1998]


*  神秘のSysRQキーとは!?
~~~~~~~~~~~~~~~~~~~~~~~~
それは、魔法の組み合わせキーだ。このキーの組合わせを押せば、カーネルが
動いている限り、どんな作業の実行中であろうと答えてくれる。これが神秘の
SysRQ キーなのだ。


* どうすれば神秘のSysRQキー有効にできるのか?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
カーネルを構築する時'Magic SysRq key (CONFIG_MAGIC_SYSRQ)'という項目に
"yes"と答えれば良い。このオプションは、2.1.x以降のカーネルにのみ存在する。


*  どう打てば、神秘のSysRQキーになる!?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
x86の場合 - 'ALT-SysRQ-<コマンドキー>'を同時に打鍵すればよい。注意 - (古い?)
	    キーボードによっては、'SysRQ'と書かれたキーがないかも知れない。この
	    キーは、'Print Screen'キーとしても知られている。

SPARCの場合 - 'ALT-STOP-<コマンドキー>'を押せばいいと思う。

PowerPCの場合 - 'ALT-Print Screen-<コマンドキー>'。

その他の場合 - もし、他のアーキテクチャーにおけるキーの組合せがわかれば、
	       ぜひわたしに教えてほしい。それをこの節に追加しよう。


*  どんな'コマンドキー'があるんだ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'r'     - キーボードrawモードをオフにし、XLATEを設定する。

'k'     - 現在のバーチャルコンソールでのすべてのプログラムをkillする。

'b'     - 即座にシステムをリブートする。その際、ディスクのsyncやアンマウント
	は実行されない。

'o'     - システムをシャットオフ(つまり終了して電源OFFね)する。
	(もしそのように設定され、かつこの動作がサポートされていればだけど)

's'     - すべてのマウントされているファイルシステムをsyncしようとする。

'u'     - すべてのマウント済みのファイルシステムを'書き込み不可'で
	  再マウントする。

'p'     - 現在のレジスターとフラグをコンソールにダンプ出力する。

't'     - 現在のタスクのリストとその情報をコンソールにダンプ出力する。

'm'     - 現在のメモリ情報をコンソールにダンプ出力する。

'0'-'9' - コンソールのログレベルを変更する。ログレベルによってどんな
          カーネルメッセージがコンソールに出力されるかが変わる。
          (たとえば、'0'ではPANICやOOPSといった緊急のメッセージのみを
          コンソールに出力するようになる。)

'e'     - init以外のすべてのプロセスにSIGTERMを送る。

'i'     - init以外のすべてのプロセスにSIGKILLを送る。

'l'     - SIGKILLをinitを「含む」すべてのプロセスへ送る。(そのため、
	  このあとあなたのシステムはなにもできなくなる。)


*  わかった、じゃ何のためにつかうの?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
よく聞いてくれた。un'R'awは、Xサーバやsvgalibプログラムがクラッシュしたときに
とても便利なんだ。

sa'K' (system attention key: システム警告キー)は、コンソールを切替えさせて
くれないプログラム(たとえば、Xやsvgalibのプログラム)を終了させたいとおもった
ときに便利だ。

re'B'ootは、シャットダウンさせることができなくなった時に便利。ただし、
その前に'S'yncと'U'mountを実行しておこう。

'S'ync は、システムがロックしてしまったときにばっちり使える。これはディ
スクにsyncを行ない、できるだけデータを失ったり、fsckしなければならない
確率を下げることができる。注意としては、syncはOKとかDoneの文字が画面に
でるまでは、処理が済んでいないことだ。(もしカーネルが本当に大変なことになっ
ていたら、OKとかDoneとかのメッセージを永遠に見られない可能性もあるが……)

'U'mountはの働きは基本的に'S'yncと同じで、有用なコマンドである。わたしは自分の
システムがロックしてしまった時は、通常'S'yncと'U'mountを実行して、その後
re'B'oootすることにしている。これは、多くのfsckを回避してくれた。
umount(ほんとは書き込み禁止で再マウントするんだけどね) の場合も、OKや
Doneの文字が画面にでるまでは処理が終わっていないので要注意。

ログレベルの'0'-'9'は、見たくもないカーネルメッセージの洪水でコンソー
ルがあふれてしまったようなときに有効である。'0'を設定すれば、コンソー
ルに届くメッセージのうちもっとも重大なカーネルメッセージを除き、すべ
てのメッセージを抑制してくれる。 (ただし、もし syslogd/klogd が生きて
いる場合、それらが書き込むログには  ここで抑制したメッセージもそのまま
記録され続けることになる)。

t'E'rmと、k'I'll は、他の方法ではkillできないようなある種の暴走したプ
ロセスがあったときに有効だ。特にそいつが別のプロセスを生み続けている場
合には有用である。


*  時々SysRQを使ったのが原因で「固まる」ようにみえるけどどうすればいいの?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
その現象はわたしも経験している。そのときはキーボードの両側にあるシフト、
Alt、コントロールのキーを軽く叩き、さらに (そう、例えば alt-sysrq-z み
たいな) 無効な sysrq シーケンスを打ち込むことで良くなるようだ。別の仮
想コンソールに(ALT-Fn)を使って切替えて、また戻して、再度実行するのも効
果があるときがある。


*  SysRQを押してみた。でもなにも起こったようにみえない。どこがわるい?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
いくつかのキーボードは、'SysRQ'をサポートしていない。'showkey -s'を実行し、
SysRQキーをおしたり、alt-SysRQキーを押して0x54というコードが生成されている
か見て欲しい。もし0x54が生成されなければ、別のキーシーケンスへこの機能
を割り当てることもできる。showkeyによって適当なキーコードを見つけ、
[/usr/src/linux/]include/asm/keyboard.h の'#define SYSRQ_KEY 0x54'とい
う定義をあなたが使いたいものに変えて再コンパイルすればよい。ああそうだ、
ところで、'showkey'の終了の仕方だが、10秒ほどなにもタイプしなければ、
ちゃんと終了するよ。


*  ほかに質問あるんだけど、だれにきけばいいの?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
気軽にmyrdraal@deathsdoor.comへ送ってくれ。できるだけ素早く返答するよ
うにするよ。もし、この電子メールアドレスがうまくいかないなら、
myrdraal@jackalz.dyn.ml.orgを試してみてほしい。
訳注) いずれも「英語で」メールしてくださいね。:) もし、日本語で送るなら
訳者の hiroshi@ChangeLog.net か miura@blue.gr.jp へ聞いてみて欲しい。

 -Myrdraal

==番外編==

SysRQキーの組合わせを覚える魔法の呪文
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
原文では、英語の綴りと関連させて覚えやすいように説明してあるけど、日本
語を使っている人にはちょっと難しいよね。そこで、日本語での語呂合わせを
考えてみたから参考にしてみて!もっといい覚え方があったら、気軽に送って
ほしい。宛先はJF@linux.or.jpだよ。

その1

「タスクのダンプは tmp へ出そうよ。キーボードにはあーる(r)くんを呼び出して、
  きえろ(kiel)と命令してタスクをころし、 subして手をあわせ祈るのだ。」
ち、ちょっとくるしい:)

その2

「えい (ei) とりあえず止めちまえ (signal TERM, signal KILL)」
「心配 (s) なのは埋もれた (u) 宝 (sync, umount)」
「ぶっても (b) 起きない (o) ロクデナシ (l) (reboot, shutoff, kill init)」
「キーの復活リバイバル (r)」
「ウルサイおしゃべり、ボリューム "0" に」 (寄贈: 佐野@浜松 様)
これは覚えやすそうだね。

[翻訳,追加: 三浦広志 miura@blue.gr.jp]

Linux カーネル 2.2 付属文書一覧へ戻る