なぜ2回の連続審査プロセスがありますか?

なぜ2回の連続審査プロセスがありますか?

私はDebian Wheezy(スクリーンバージョン)を実行しているコンピュータを持っています。4.01.00 開発)と別のDebian Squeeze(スクリーンバージョン)4.00.03jw4)そして、これら2つの画面の下で、screenという別のプロセスを自動的に起動します。たとえば、

init(1)-+-acpid(1926)
        |-sshd(2139)---sshd(2375)---bash(2448)---screen(6649)---screen(6650)-+-bash(6651)---pstree(6751)

psPID 6649コマンドによると、screenPID 6650コマンドは次のようになりますSCREEN

root@vserver:~# ps -f -p 6650
UID        PID  PPID  C STIME TTY          TIME CMD
root      6650  6649  0 11:26 ?        00:00:00 SCREEN
root@vserver:~# 

なぜscreenこれが起こるのですか?

答え1

外部(PID 6649)は起動した端末に接続し、(+、)を外すと終了しますscreenCtrlad

内部screen(PID 6650)いいえこの端末に接続するのではなく、bashこの端末で起動されたデバイスが接続される自己疑似端末(pty)デバイスを制御します。

外部端末に何かを入力すると、外部端末がscreenそれを受け取り、ソケットを介して内部画面に送信し、入力を制御するptyに渡し、最終的にbash(または他のプログラムに到達します))はbashで始まり、同じptyをを介して制御されます。 bashの出力(またはここで開始されたすべてのプログラム)はinnerscreenのptyに送信され、これにより内部はscreenソケットを介して外部に送信され、screen最終的に起動した端末に送信されますscreen(あなたの場合は再び次のようになります)。 ptyコンストラクタsshによってソケットが生成されます。内部に screen、取り外し、再接続が可能です(下記参照)。

インスタンスを分離すると、インスタンスが制御する内部とptyが存在し続けますscreenscreenこれが接続プロセスがI/Oを試みても生き残る理由です。ただし、外部端末がscreen終了し、外部端末の接続が切断されます。たとえば、sshセッションを終了してその pty を削除することができ、それ自体のscreenpty デバイスを介して通信するため、内部的にまたはそのプログラムによって開始されたプログラムには影響しません。

もう一度ログインし(別のptyを作成し)、screen -r呼び出しの内部インスタンスに再接続し、その後再表示するために独自のptyの現在の状態を「外部」に送信します。 I / O転送ラインは、外部インスタンスに対して以前と同じように発生します。screenscreenscreenscreenscreen

今一つ作ればpstree見つけることができます。二つLines: 1 つは新しい「外部」インスタンスで始まり、終了しscreen、もう 1 つは分離時に親インスタンスがなくなった「内部」インスタンスで始まります。sshdscreenscreenscreen

簡単に言うと:

  • 「外部」画面(PID 6649)は、対話している端末(あなたの場合によって生成されたpty ssh)に接続され、インスタンスに接続されている間にのみ存在しますscreen
  • 「内部」画面(PID 6650)は、画面の下で始まるプログラムに別々のptyを提供し、外部インスタンスと内部インスタンス間で端末状態を渡すためのソケットも提供しますscreen。終了するまでscreen(分離しない)ままです。
  • この分離は、制御されたプログラムが外部ptyが終了した後も生き残ることができるようにするために必要です(他のptyに接続して、ptyとその制御プロセス(内部screen)は外部端末から分離されても生き残ります)。内部は、screen接続できるソケットの新しいインスタンスを提供しますscreen

答え2

2番目のプロセス(例では、PIDが6650のプロセス)の理由は、ログアウトできるようにtty接続(stdin、stdout、およびstderr)を閉じることです。後でもう一度ログインして画面をもう一度確認してください。

ご覧のとおり、PID 6650はttyに接続されていません(TTY列に「?」が表示されています)。

関連情報