「w」コマンドを実行すると、2人のユーザーがログインしているのがわかります(どちらも私です)。 "1人のユーザーが一度に複数のアクティブセッションを持つことができるため、これは正常であることがわかります。"
セッションとは?システムに一度しかログインしていないのに、なぜ2つあるのですか?
Session
は通常、シェルセッションを指します。 Shell は、コンピューターとの対話を可能にするものです。これは、ユーザーと kernel の間のブリッジとして機能します。コマンドを実行するときはいつでも、シェルが意図を取得し、カーネルにそのことを実行するように指示します。
ほとんどのLinuxフレーバーでは、デフォルトのシェルはbash
であり、新しいターミナルを開くたびに新しいbash
セッションが起動されます。投稿したw
の出力では、グラフィカルログインセッションを使用しているようです(マシンに向かっているように見えます)。
argento :0 18set13 ?xdm? 2days 1.58s gdm-session-worker [pam/gdm-password]
いくつかのオープンターミナルエミュレータ:
argento pts/0 18set13 29:26m 5:26 5:26 rdesktop -g 1200x700 -u administrator -p XXXXXXXXX -d DOMAIN -K srv-wsus
argento pts/1 18set13 9days 0.16s 0.16s /bin/bash
argento pts/2 lun10 5.00s 0.09s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/3 14:40 33:41 0.09s 0.03s vim notes.txt
argento pts/4 gio12 26:04m 0.10s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/5 14:56 17:33 0.11s 0.11s /bin/bash
また、非グラフィカルttyからログインしたようです。
argento tty2 15:11 1:01 0.09s 0.09s -bash
これらはそれぞれシェルの個別のインスタンスであり、それぞれ独自のセッションとしてカウントされます。
すべてのターミナルセッションはユーザーセッションだと思います。 Xの下に複数の端末を置くことができ、それらは仮想端末です。または、uはコンソールの下に実際の端末を置くことができます。これらはすべてセッションです。これは私の「w」です
$ w
15:14:13 up 9 days, 6:02, 8 users, load average: 1,03, 1,19, 1,31
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
argento :0 18set13 ?xdm? 2days 1.58s gdm-session-worker [pam/gdm-password]
argento pts/0 18set13 29:26m 5:26 5:26 rdesktop -g 1200x700 -u administrator -p XXXXXXXXX -d DOMAIN -K srv-wsus
argento pts/1 18set13 9days 0.16s 0.16s /bin/bash
argento pts/2 lun10 5.00s 0.09s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/3 14:40 33:41 0.09s 0.03s vim notes.txt
argento pts/4 gio12 26:04m 0.10s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/5 14:56 17:33 0.11s 0.11s /bin/bash
argento tty2 15:11 1:01 0.09s 0.09s -bash
2番目の列はttyを示しています。ptsはxterm(仮想端末)であり、もう1つ(tty2)はコンソールログインです。
1.ユーザーは単一のプロセス(コマンドラインインターフェイスであるシェル)にログインしますが、ユーザーは次のようなアクションの結果として多くのプロセスを実行することになります。
->バックグラウンドで非インタラクティブタスクを実行しています。
->ジョブ制御を介したインタラクティブタスク間の切り替え。
->パイプを介して連携する複数のプロセスを開始します。
->複数のターミナルウィンドウを開くことができるXウィンドウシステムなどの実行中のウィンドウシステム。
2.これらすべてのプロセスを処理するために、カーネルはこれらのプロセスで構成されるプロセスグループを形成する必要があります。
3.これらのプロセスグループをユーザーごとにさらに管理するには、これらのグループをユーザーごとにセッションに分割します(ここでは、ユーザーはLinuxユーザーではなく、シェルまたはターミナルがユーザーを表しています。同じLinuxユーザーがログインした同じマシン上の2つのターミナルここでは、2つの異なるユーザー、つまり2つの異なるユーザーセッションを表しています。
その「ユーザー」またはセッションに対してシェルを実行しているプロセスは、セッションリーダーと呼ばれます。
4.また、「x」ボタンを押してターミナルを閉じても、そのターミナルから抜けることはありません。その端末はバックグラウンドで実行し続けます。端末からセッションをオーバーしたい場合は、CTRL + Dを押してログアウトするか、終了する必要があります。
5.端末からログアウトすると、カーネルはセッションリーダーであるプロセスにSIGHUPシグナル(kill -1と同様)を送信します。ターミナルで実行されている他のすべてのプロセスは、このセッションリーダーの子です。これらの子プロセスは、このセッションリーダープロセス(親プロセス)によって制御されるプロセスグループを形成していました。
6.セッションリーダープロセスは、SIGHUPを各子プロセスに送信します。一部のプロセスは終了しますが、一部のプロセスは終了しないことを選択できます(中断またはバックグラウンドで実行中)。終了しないことを選択したユーザーは、セッションが終了すると孤立し、initプロセス(Linuxマシンのすべてのプロセスの親)にすぐに採用されます。
詳細については、リンクを参照してください Linux開発のプロセスモデル
セッションは、ユーザーのプロセスによって実行される各ターミナルシェルです。たとえば、現在3つのセッションが実行されています。私のMateデスクトップ環境と2つのターミナルウィンドウ。