2011.12.24
前へ
次へ
目次へ戻る
ホームページトップへ戻る

パソコンをつくろう!(パソコン自作のすすめ)
組み立てキットを使って自作に挑戦!

[第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

前へ
次へ
目次へ戻る
ホームページトップへ戻る