神秘の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]