linux中“会话”的定义是什么?

Ulk*_*oma 12 linux session

当我运行“w”命令时,我看到两个用户登录(都是我)。在这里快速搜索一下,这是正常的,因为“一个用户可以在任何时间拥有多个活动会话”。

什么是会话?当我只登录一次系统时,为什么我有两个?

ter*_*don 11

Session通常是指外壳会话。一个是什么让您与计算机进行交互。它充当用户和内核之间的桥梁。每当您运行命令时,shell 都会捕获您的意图并告诉内核执行其操作。

在大多数 Linux 版本中,默认 shell 是bashbash每次打开新终端时都会启动一个新会话。在w您发布的输出中,您似乎拥有图形登录会话(看起来您正在 ssh 机器上):

argento  :0        18set13 ?xdm?   2days  1.58s gdm-session-worker [pam/gdm-password]
Run Code Online (Sandbox Code Playgroud)

几个开放的终端模拟器:

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
Run Code Online (Sandbox Code Playgroud)

而且您似乎也从非图形 tty 登录:

argento  tty2      15:11    1:01   0.09s  0.09s -bash
Run Code Online (Sandbox Code Playgroud)

其中每一个都是您的 shell 的一个单独实例,每个都算作自己的会话。


小智 5

1. 尽管用户登录到单个进程(shell 是他们的命令行界面),但用户最终会运行许多进程作为操作的结果,例如:

-> 在后台运行非交互式任务。
-> 通过作业控制在交互式任务之间切换。
-> 启动通过管道协同工作的多个进程。
-> 运行窗口系统,如 X 窗口系统,允许打开多个终端窗口。

2. 为了处理所有这些进程,内核需要形成由这些进程组成的进程组。

3. 为了进一步根据用户管理这些进程组,将这些组按用户划分为会话。(注意这里的用户不是linux用户,而是shell或终端代表用户。同一台机器上的两个终端由同一个linux用户登录在这里代表 2 个不同的用户,因此代表 2 个不同的用户会话。一个终端只能控制单个会话的终端)。
为该“用户”或会话运行 shell 的进程称为会话领导者。

4. 另请注意,按“x”按钮关闭终端不会让您退出该终端。该终端一直在后台运行。如果您想从终端结束会话,您必须按 CTRL+D 或退出从那里注销。

5. 当您从终端注销时,内核会发送 SIGHUP 信号(类似于 kill -1)到会话领导者的进程。现在,在终端中运行的所有其他进程都是该会话领导者的子进程。这些子进程形成了由这个会话领导进程(父进程)控制的进程组。

6. 会话领导进程向每个子进程发送SIGHUP,一些进程终止,而一些进程可以选择不终止(那些暂停或在后台运行)。那些选择不终止的会话在会话结束时成为孤儿,并立即被 init 进程(Linux 机器中所有进程的父进程)采用。


有关更多信息,请参阅链接Linux 开发的过程模型