linux: 区分不同会话打开的进程

187 阅读2分钟

在 Linux 系统中,虽然可能有多个会话都是由同一个用户(例如 root 用户)创建的,但每个会话都有其唯一的标识。为了区分同一个用户在不同会话中打开的进程,我们可以使用以下几种方法:

  1. 通过 TTY(终端)信息区分

    • 每个会话通常都会关联到一个特定的终端。我们可以通过查看进程的 TTY(终端)信息来区分不同会话的进程。
    • 例如,使用 ps 命令,加上 a 选项可以显示所有终端的进程,并显示 TTY 列:
      ps a -u root
      
  2. 通过会话 ID(Session ID, SID)区分

    • 在 Linux 中,每个会话都有一个唯一的会话 ID(SID)。我们可以通过查看进程的会话 ID 来区分不同会话的进程。
    • 例如,使用 ps 命令,加上 j 选项可以显示会话 ID 列:
      ps j -u root
      
  3. 通过进程组 ID(Process Group ID, PGID)区分

    • 在 Linux 中,每个会话的所有进程都会属于一个进程组,该进程组具有唯一的进程组 ID(PGID)。我们可以通过查看进程的进程组 ID 来区分不同会话的进程。
    • 例如,使用 ps 命令,加上 j 选项可以显示进程组 ID 列:
      ps j -u root
      
  4. 使用 who 命令查看登录会话

    • who 命令可以显示当前登录系统的用户及其终端信息。通过此命令,你可以获取终端的名称,然后使用 ps 命令按终端名称过滤进程。
    • 例如,运行 who 命令,然后查找特定终端的进程:
      who
      ps a -u root | grep tty名称
      
  5. 使用 ssnetstat 命令

    • 如果会话是通过网络连接(例如 SSH)创建的,你可以使用 ssnetstat 命令查看网络连接,并通过本地和远程地址以及端口来区分不同的会话。
    • 例如,运行以下命令查看网络连接:
      ss -tunap | grep ssh
      

通过上述方法,我们可以区分同一个用户在不同会话中打开的进程。每种方法都有其适用场景和优缺点,可以根据实际情况选择适合的方法。