パソコンをつくろう!(パソコン自作のすすめ)
組み立てキットを使って自作に挑戦!
[第277回]
●Ubuntuが終了できません
[第275回]でお見せしましたパラレルポートへのパルス出力プログラム(下のリスト)は、いわゆる「無限ループ」です。
強制的に処理を終了しない限り永遠にパルスを出力し続けます。
/* outtest7.c */ #include <sys/io.h> #define OUT_PORT 0x378 int main(void){ ioperm(OUT_PORT, 4, 1); while(1){ outb(0xff, OUT_PORT); outb(0x00, OUT_PORT); } return 0; } |
普通はこういうプログラムは書きません。
ちょっと乱暴です。
ですけれど、このプログラムの目的としては、とにかく速攻で簡単にパルスを出力して、結果がどうなるか試してみたい、というものでありましたから、まあなんとかなるだろうよ、とその場ででっちあげてただちに実行してみたものであります。
こういうプログラムを強制終了するには、[Ctrl]+[C]を入力します。
ハングアップしているわけではありませんから、普通はそれで終了します。
もうひとつやや乱暴な方法ですが、実行中の「端末」を、その左上の[×]をクリックして終了してしまう、というやり方もあります。
パルス出力波形をオシロでモニタしながら、その写真を撮ったり、プログラムファイルをLAN経由でWindowsパソコンに送ったりしながら、何回かパルス出力プログラムを実行したり、それを強制終了したりといったことを繰り返したあと、Ubuntu11.10を終了しようとしましたら、終了できなくなってしまいました。
いえ。
ハングアップしたわけではありません。
マウスも動きますし、アプリケーションの起動や終了も自由にできます。
ただ。
Ubuntu11.10の終了だけができません。
普通にデスクトップ画面右上の電源ボタンをクリックして「終了」するのですけれど、終了しかかって、最後のところで再び起動してしまいます。
実は後になっていろいろ思い出して確認しましたところ、かなり再現性があることがわかりました。
無限ループのパラレルポート出力プログラムを実行したままで、「端末」も終了しないでいきなりUbuntu11.10の終了操作をすると、本来ならば実行中のプログラムを全て強制的に終了した後にUbuntu11.10が終了するのですけれど、パラレルポートからパルスが出力された状態のまま、Ubuntu11.10が終了動作になる場合があって、そうすると、本当に終了するところまで行かずに、再びUbuntu11.10が起動してしまうのです。
これにはもうひとつ条件がありまして、LANでつながったWindowsパソコンの共有フォルダを開いたまま、上記の操作を行なうと、より再現性が高くなることがわかりました。
そして困ったことに、Ubuntu11.10が再び起動したときには、その前に開いていた「端末」は閉じてしまっていますから、それを終了する手立てがありません。
いろいろやってみましたが、どうにもなりません。
うう。
せっかくさすがリナックス。さすがUbuntuと、さんざ持ち上げてきましたのに。
だめじゃないの。
かくなる上は。
最後の手段で、リセットSWを押して強制終了するしかないか、と思いましたが。
それは、本当にどうしようもないときの最後の手段です。
Windowsではありません。
なんたってリナックスなのですから。
何か手段があるはず。
そう思い直して探ってみましたら。
ありました。
こういう場合にアプリケーションを強制終了させる奥の手が。
その奥の手を使ってみましたら。
ずっと出っぱなしだったパラレルポートからのパルス出力が、ぴたりと止まりました。
そして。
おお。
Ubuntu11.10が正常に終了するようになりました。
本日は時間がなくなってしまいました。
その奥の手につきましては、次回に説明をいたします。
パソコンをつくろう![第277回]
2011.12.24upload
前へ
次へ
目次へ戻る
ホームページトップへ戻る