
Linuxプログラミングインターフェースより
対話型シェルでは、通常、これらの 3 つのファイル記述子 0、1、2 は、シェルが実行されている端末を参照します。
「シェルが実行されている端末」とは、対話型シェルが属するセッションの制御端末を意味しますか?
はいの場合、シェルのセッションに制御端末がない場合はどうなりますか?
シェルが親プロセスから作成されると、次の各ケースで、シェルはファイル記述子 0、1、2 と端末間の接続を自動的に作成します (シェルの親プロセスからの継承)。
「シェルが実行されている端末」または制御端末が、0、1、2 以外のファイル記述子ですでに開かれている場合はどうなりますか?
ファイル記述子 0、1、2 が、「シェルが実行されている端末」または制御端末ではないファイルにすでに接続されている場合はどうなりますか?
- 引用文中のシェルが非対話型の場合はどうなるでしょうか?
ありがとう。
ちなみに、「シェル」は POSIX または bash であると想定してください。
答え1
いいえ。
これは、のさまざまな実装によって行われますgetty
。open-controlling-tty
、SSH サーバーのフォークされた pty スレーブ側部分、GUI 端末エミュレーターのフォークされた pty スレーブ側部分などによって実行されます。
そして、引用した文章に注目してください意味はないシェルがこれを実行するとは考えていません。あなたは、根拠のない誤った前提に基づいて、大量の疑問を作り出しました。
そして、あなたはそれがgetty
これを行うことを知っていました。なぜなら、あなたはそれが「ログインによって導かれるプロセスセッションはいつ開始されますか?この質問と同時に書かれた「」。
参考文献
- getty と agetty の違いは何ですか?
- 「askfirst」getty with systemd(「このコンソールを起動するには Enter キーを押してください」)
- ジョナサン・デ・ボイン・ポラード。仮想端末ログイン「」。noshガイド. ソフトウェア。
- ジョナサン・デ・ボイン・ポラード。実際の端末ログイン「」。noshガイド. ソフトウェア。