Changes between Version 1 and Version 2 of LinuxControllingTTY


Ignore:
Timestamp:
08/13/07 05:29:37 (12 years ago)
Author:
sgk
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • LinuxControllingTTY

    v1 v2  
    55Unixで仕事するようになって2 decadeほど経つというのに、こんなことで数時間悩んでしまいました。悲しい。 
    66 
    7 '''制御端末'''というのは、Unix系OSで、各プロセスが^Cとか^Zによる''制御''を受ける端末(文字端末)のことです。 
     7'''制御端末'''というのは、Unix系OSで、各プロセスが`^C`とか`^Z`による''制御''を受ける端末(文字端末)のことです。 
    88言い方を変えると、ある端末で^Cや^Zを押したとき、それぞれSIGINTRやSIGTSTPシグナルが、その端末を'''制御端末'''としている複数のプロセスに送られます。 
    99制御端末の話題とからんで、必ずプロセスグループとかセッションどうのこうのという話題がつきまといますが、ここでは割愛します。 
     
    2222で、`console`ですが、どういう理由なんでしょうね。確かに「仮想的」と言えばそのとおりですが、誰がいつアクセスしても同じ物理デバイスがアクセスされるわけなので、制御端末に成れてもいいような気がします。 
    2323これは想像ですが、マシンルームなどに設置された「コンソール」からいたずらができないようにしているのではないかと思います。 
    24 システムの起動中(rcが動いている最中)に^Cで止められたらたまった物ではありません。 
    25 あるいは、起動後であっても、コンソールで^Cを押したことが、いずれかのプロセスに影響してしまったら困ります。 
     24システムの起動処理中(rcが動いている最中)に`^C`で止められたらたまった物ではありません。 
     25あるいは、起動後であっても、コンソールで`^C`を押したことが、いずれかのプロセスに影響してしまったら困ります。 
    2626だから、`/dev/console`は制御端末に成れないようにしてあるのではないかと思います。 
     27 
     28 そういえば、僕が大学生のとき、大学の「端末室」に一台だけ設置してあった「Sony NEWS」は、起動処理中に`^C`を押すとシングルユーザモードのシェルプロンプトが現れました。 
     29 勝手にユーザIDを登録して遊んでいました。今はそういうことができないようになったってことでしょうか。 
     30 
     31以上はLinuxのソースで調べたのですが、正統派のUnixではどうなのでしょうね。 
     32 
     33なぜこんなことにぶつかったのかといえば、BusyBoxです。 
     34最近、とある仕事でLinuxを組み立てているのですが、これまでBusyBox 1.2.1だったのを1.6.1に変更したら、シェルでのジョブ制御ができなくなりました。曰く「`can't access tty; job control turned off`」。 
     35調べていくと、`tty`コマンドの結果が1.2.1の時には「`/dev/ttyS0`」だったのに、1.6.1では「`/dev/console`」に変わってます。 
     36この原因は、BusyBoxのソースの「`init/init.c`」の`console_init()`関数です。 
     371.2.1では、コンソールとして使っている(本当の)デバイスを探す処理が入っていたのですが、1.6.1では無くなっています。 
     381.2.1でうまくいっていたのは、こういう「特殊な」ことをやっていたからなのです。 
     39では、1.6.1ではわざわざ低機能化させたのかといえば、そんなことはありません。 
     40この機能は別のコマンド「`/usr/bin/cttyhack`」に移っています。 
     41これまで「`/bin/sh`」としてシェルを起動していた部分を、「`/usr/bin/cttyhack /bin/sh`」に変えれば、元通りジョブ制御ができるようになります。 
     42 
     43''(2007/8/13 - sgk)''