質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

810閲覧

sshdデーモン と gnome-terminal-serverデーモン について

akiyama3284pga

総合スコア186

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2022/09/22 13:54

sshd(ssh*2ログイン時の ps -fx)

1718 ? S 0:00 sshd: aki@pts/1 1719 pts/1 Ss 0:00 \_ -bash 1734 pts/1 R+ 0:00 \_ ps xf 1546 ? S 0:00 sshd: aki@pts/0 1547 pts/0 Ss+ 0:00 \_ -bash

gnome-terminal-server(gunorm端末*2起動時の ps -fx)

15862 ? Ssl 0:09 \_ /usr/libexec/gnome-terminal-server 15871 pts/0 Ss 0:00 \_ bash 18065 pts/0 R+ 0:00 | \_ ps -fx 15976 pts/1 Ss+ 0:00 \_ bash

2つを見比べますと、
両方ともデバイスファイルが別々のシェルに紐づいていることがわかりますが、
後者は一つのプロセスに複数のデバイスファイルが紐づいています。

これが問題にならない理由がわかりません。
gui環境では、疑似端末というxクライアントを通じてデバイスファイルに書き込まれ、それから各紐づくシェルに送られると考えているため、このあたりの理解が上手くいきません。
一つのxクライアントプロセスが全てのデバイスファイルへの書き込み、出力を担当しているのでしょうか...?

ご助言等頂けましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2022/09/22 14:04

> 両方ともデバイスファイルが別々のシェルに紐づいていることがわかりますが、 これは具体的に何のことを言ってますか? 2つのbashプロセスの制御端末が異なると言うことを言っていますか? > 後者は一つのプロセスに複数のデバイスファイルが紐づいています。 これも具体的に何のことを言ってますか?これは全くわかりません。
akiyama3284pga

2022/09/22 14:51

お世話になります。 別々に…といいますのは仰る通りでございます。 制御端末のことをデバイスファイル書いておりました。 また、後者の件では、 実際にターミナルが2枚開いているため、例のsshdのようにgnome-terminal-server(擬似端末)のプロセスが2つあって、それぞれの子プロセスとしてそれぞれのシェルが紐付いているのが正しいのではないかと、考えております。
winterboum

2022/09/23 03:00

「正しい」というところがよくわかりません 正しい、正しくない の基準は何でしょう?
akiyama3284pga

2022/09/23 03:47

https://ttssh2.osdn.jp/manual/4/ja/reference/sourcecode.html 上記の記事を参考にしております。 記事中、 "シェルは、sshdからforkされて子プロセスとなり、親プロセス(sshd)が初期化済みのスレーブデバイスドライバとお話をすることになる" とあります。 これが意味するものは、sshdが接続が来るたびに増えているため、その子プロセスとしてのシェルは、親プロセスのsshdの開いた制御端末を一意に選択できるということだと思います。 これはsshdの場合ですが、これがguiログイン時の疑似端末(xterm, グノム端末等)の場合(後者の例)で考えますと、 疑似端末に対応する制御端末が複数あるため(例ではpts/1とpts/2)、どちらに対して書き込めばよいのか判断できないのではないかと考えております。
winterboum

2022/09/23 03:54 編集

その記事はsshでの接続の話ですよね? 私が知りたいのは、guiログインの時に「正しい、正しくない 」としているのはなにを基準にしているのか、 です
akiyama3284pga

2022/09/23 04:07

疑似端末により、制御端末(pts/#)に書き込みが行われる。 この自分の理解が間違っていない場合、 疑似端末と制御端末が、 1:1 で対応しているのが正しく、 1:多で対応しているのは正しくない、 という判断をしております。 そもそも見方等に誤りがあるのか、それともその理解からすでに間違っているのか、 自分の検索力ではわからずにおります。
winterboum

2022/09/23 06:12

1:多で対応しているのは なぜ 正しくない、 のでしょう。そこに判断基準があります
akiyama3284pga

2022/09/23 08:17

失礼いたしました。 擬似端末は、グノーム端末のようなターミナルエミュレータのことを意味したかったです。上の文では制御端末が制御端末に書き込むのような意味不明な意味となっておりました。 デーモンプロセスは特定のttyに紐付いている必要は無いと思います。 例ではsshdの立ち位置に、guiの場合ターミナルエミュレータが来ると思います。 なので、一つのデーモンプロセスに複数の制御端末とそれに紐付くシェルが対応していると、 例えばターミナルエミュレータ1で入力したコマンドと、 ターミナルエミュレータ2で入力したコマンドをどの制御端末に書き込むべきか、区別がいかないのではないかと考えております。 いくつターミナルエミュレータを立ち上げても、シェルや制御端末が増える一方、肝心のターミナルエミュレータのプロセスが増えていないことが不思議でなりません。
guest

回答2

0

また、後者の件では、
実際にターミナルが2枚開いているため、例のsshdのようにgnome-terminal-server(擬似端末)のプロセスが2つあって、それぞれの子プロセスとしてそれぞれのシェルが紐付いているのが正しいのではないかと、考えております。

sshでのログインだと、
sshdデーモンプロセス ⇒ (ログイン処理ごとに生成される)個別のsshdプロセス ⇒ bash
という構成なのに、GNOME端末を開く時は、
gnome-terminal-serverデーモンプロセス ⇒ bash
という、デーモンプロセスとbashの中間プロセスが無いのは何故かという質問でしょうか?

それはGNOME端末を開く時には認証が必要ないからです。ログイン済みなので。
「個別のsshdプロセス」は、PAMによる認証をする都合で必要らしいです。

デーモンプロセスからforkされた後、認証してログインシェル(bash)にexecveすれば「個別sshプロセス」は残らないのですが、ちょっと理由は忘れましたが、直接execveするのはまずくて、再度forkしてからログインシェルにexecveするようでうす。PAMが出来る前は中間は無かったです。

両者の違いは、制御端末の話とは直接関係ないです。

投稿2022/09/25 12:29

otn

総合スコア84559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akiyama3284pga

2022/09/25 13:16

ご回答ありがとうございます。 わかりにくい質問となってしまったことを反省しております。 まさにその点が疑問の中心となっておりました。 ------ ご回答からの再解釈 --------- sshの場合には、個別認証が必要なため、接続の度に一々にsshdが新たに子としてforkされていく。 つまり、単に認証のためであり、それが必要ないならばgnome-terminal-serverの例と同じように、 単ーのデーモンプロセスにより、全ての接続(gnome-terminal1, 2....)が管理される、ということになる。 どのgnome-terminalが、どの制御端末(pts1,2...)に対応しているかも、そのデーモンが一元管理している。 ------------------------------------ このように、理解いたしました。 psをよく調べてみますと、gnome-terminal-serverはマルチスレッドであり、常時5つ程度のスレッドが起動しておりました。これは起動しているエミュレータの数には比例していないようでした。 もう少し調べてみたいと思います...
guest

0

ベストアンサー

デーモンプロセスは特定のttyに紐付いている必要は無いと思います。

そのとおりですし、ひもついては いないです

例えばターミナルエミュレータ1で入力したコマンドと、ターミナルエミュレータ2で入力したコマンドをどの制御端末に書き込むべきか、区別がいかないのではないかと考えております。

この 「区別がつかない」の主語はなんですか?
「 デーモンプロセス」だとすると、区別する必要はない、 です。
どの pts に書き出すか、は bashが承知しています。
でもないな、
bash は単に stdio に書き出しているだけ。
bashを起動する人が 空いている pts を探し、それを stdioにリダイレクトさせて bashを起動している。

>いくつターミナルエミュレータを立ち上げても、シェルや制御端末が増える一方、肝心のターミナルエミュレータのプロセスが増えていないことが不思議でなりません。
ここは実装次第だとおもうので、code読んでいない身ではわかりません。

投稿2022/09/23 08:57

winterboum

総合スコア23347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akiyama3284pga

2022/09/24 02:21 編集

ご回答ありがとうございます。 おっしゃるとおり、主語は"デーモンプロセス(nome-terminal-server)"を意味しております。 nome-terminal-server == 端末自体だと理解したため、辻褄が合わなくなっておりました。 sshdも実際には、ps -afx 等で表示しますと、更に上には親プロセスとしてsshd(d)がいることにも気が付きました。 以下を 1008 ? Ss 0:18 /usr/sbin/sshd -D 24048 ? Ss 0:00 \_ sshd: aki [priv] 24154 ? S 0:00 | \_ sshd: aki@pts/0 24157 pts/0 Ss+ 0:00 | \_ -bash 25616 ? Ss 0:00 \_ sshd: aki [priv] 25683 ? S 0:00 | \_ sshd: aki@pts/6 25684 pts/6 Ss 0:00 | \_ -bash 25705 pts/6 R+ 0:00 | \_ ps -afx 25702 ? Ss 0:00 \_ sshd: root [priv] 25703 ? S 0:00 \_ sshd: root [net] 下のように簡略して解釈しますと、sshdでもguiと同じ構図だということがわかりました。 1008 ? Ss 0:18 /usr/sbin/sshd -D 24157 pts/0 Ss+ 0:00 | \_ -bash 25684 pts/6 Ss 0:00 | \_ -bash 25705 pts/6 R+ 0:00 | \_ ps -afx 例えば仮想コンソール(1~6)のプロセスも、自分が探した限りでは見つかりませんでしたし、 gnom端末のプロセスも、 https://askubuntu.com/questions/530360/what-is-the-name-of-the-process-for-a-running-gnome-terminal を拝見したところ、見つけるのは大変そうでした。 これが意味するところは、tty関連のプロセスはlinuxがカーネル空間かどこかで管理していて、 何か意味があって見せないようにしている、ということでしょうか。 ご回答にありますように、単にbashから見れば紐付いている標準へ(制御端末)書き込みをすれば結果を返すことはできると思います。 逆にターミナルエミュレータ側からしても、どこかで動いているそのプロセスと紐づくbashが紐づく標準へ(制御端末)書き込みすれば、bashに送れるのだと、今はこのような理解をしたいと存じます...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問