wiki:LinuxControllingTTY

Version 1 (modified by sgk, 12 years ago) (diff)

--

Linux:制御端末

もしかして常識でしたか?「/dev/console」が制御端末に成れないことを。

Unixで仕事するようになって2 decadeほど経つというのに、こんなことで数時間悩んでしまいました。悲しい。

制御端末というのは、Unix系OSで、各プロセスがCとかZによる制御を受ける端末(文字端末)のことです。 言い方を変えると、ある端末でCやZを押したとき、それぞれSIGINTRやSIGTSTPシグナルが、その端末を制御端末としている複数のプロセスに送られます。 制御端末の話題とからんで、必ずプロセスグループとかセッションどうのこうのという話題がつきまといますが、ここでは割愛します。 自分もマニュアルを読みながらじゃないと説明できないから。

本題ですが、Linuxカーネル(ドライバ)のソースを読んでみたところ、以下の端末デバイスは制御端末に成れないのです。 興味がある人は、ソース、drivers/char/tty_io.ctty_open()を見てみてください。

  • /dev/console -- カーネルの起動時の端末。システム関連のメッセージを表示するのにも使う。
  • /dev/tty0 -- tty1~の「Linux Virtual Terminal」のうち、現在表示している物を示す。
  • /dev/tty -- 現在使っている端末を示す。
  • PTYのマスター側

ttytty0は仮想的な物であり、物理的なデバイスは、アクセスしたプロセスやアクセスしたタイミングによって異なります。 だから、制御端末になれないようにするのは、当然ともいえます。 PTYのマスター側も、この上で動くプロセスは無いはずだから、考えてみればあたりまえ。 で、consoleですが、どういう理由なんでしょうね。確かに「仮想的」と言えばそのとおりですが、誰がいつアクセスしても同じ物理デバイスがアクセスされるわけなので、制御端末に成れてもいいような気がします。 これは想像ですが、マシンルームなどに設置された「コンソール」からいたずらができないようにしているのではないかと思います。 システムの起動中(rcが動いている最中)にCで止められたらたまった物ではありません。 あるいは、起動後であっても、コンソールでCを押したことが、いずれかのプロセスに影響してしまったら困ります。 だから、/dev/consoleは制御端末に成れないようにしてあるのではないかと思います。