web-dev-qa-db-ja.com

Linuxでの「セッション」の定義は何ですか?

「w」コマンドを実行すると、2人のユーザーがログインしているのがわかります(どちらも私です)。 "1人のユーザーが一度に複数のアクティブセッションを持つことができるため、これは正常であることがわかります。"

セッションとは?システムに一度しかログインしていないのに、なぜ2つあるのですか?

12
Ulkoma

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

これらはそれぞれシェルの個別のインスタンスであり、それぞれ独自のセッションとしてカウントされます。

9
terdon

すべてのターミナルセッションはユーザーセッションだと思います。 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)はコンソールログインです。

2
Luigi

1.ユーザーは単一のプロセス(コマンドラインインターフェイスであるシェル)にログインしますが、ユーザーは次のようなアクションの結果として多くのプロセスを実行することになります。

->バックグラウンドで非インタラクティブタスクを実行しています。
->ジョブ制御を介したインタラクティブタスク間の切り替え。
->パイプを介して連携する複数のプロセスを開始します。
->複数のターミナルウィンドウを開くことができるXウィンドウシステムなどの実行中のウィンドウシステム。

2.これらすべてのプロセスを処理するために、カーネルはこれらのプロセスで構成されるプロセスグループを形成する必要があります。

3.これらのプロセスグループをユーザーごとにさらに管理するには、これらのグループをユーザーごとにセッションに分割します(ここでは、ユーザーはLinuxユーザーではなく、シェルまたはターミナルがユーザーを表しています。同じLinuxユーザーがログインした同じマシン上の2つのターミナルここでは、2つの異なるユーザー、つまり2つの異なるユーザーセッションを表しています。
その「ユーザー」またはセッションに対してシェルを実行しているプロセスは、セッションリーダーと呼ばれます。

4.また、「x」ボタンを押してターミナルを閉じても、そのターミナルから抜けることはありません。その端末はバックグラウンドで実行し続けます。端末からセッションをオーバーしたい場合は、CTRL + Dを押してログアウトするか、終了する必要があります。

5.端末からログアウトすると、カーネルはセッションリーダーであるプロセスにSIGHUPシグナル(kill -1と同様)を送信します。ターミナルで実行されている他のすべてのプロセスは、このセッションリーダーの子です。これらの子プロセスは、このセッションリーダープロセス(親プロセス)によって制御されるプロセスグループを形成していました。

6.セッションリーダープロセスは、SIGHUPを各子プロセスに送信します。一部のプロセスは終了しますが、一部のプロセスは終了しないことを選択できます(中断またはバックグラウンドで実行中)。終了しないことを選択したユーザーは、セッションが終了すると孤立し、initプロセス(Linuxマシンのすべてのプロセスの親)にすぐに採用されます。


詳細については、リンクを参照してください Linux開発のプロセスモデル

2
YATIN GUPTA

セッションは、ユーザーのプロセスによって実行される各ターミナルシェルです。たとえば、現在3つのセッションが実行されています。私のMateデスクトップ環境と2つのターミナルウィンドウ。

1
Vid Plavsic