如何列出正在运行的屏幕会话?

Woo*_*kai 216 linux bash command-line gnu-screen

我有一堆服务器,我在其上运行实验screen.程序如下:

  1. ssh 到服务器XXX
  2. 发射 screen
  3. 在几个标签中开始实验
  4. 分离 screen
  5. 断开与服务器的连接

在实验运行的同时,我可以通过ssh所有服务器轻松找到它们所在的服务器并列出我正在运行的进程(使用topps).

但是,一旦实验完成,我怎么能找到我打开屏幕会话的服务器(这样我可以查看输出,重新启动它们等)?

PS:我的实验也会将输出打印到文件中......但这不是我的问题.

jos*_*rry 392

要列出用户的所有屏幕会话,请以该用户身份运行以下命令:

screen -ls
Run Code Online (Sandbox Code Playgroud)

要查看特定计算机上的所有屏幕会话,您可以:

ls -laR /var/run/screen/
Run Code Online (Sandbox Code Playgroud)

我在我的机器上得到这个:

gentle ~ # ls -laR /var/run/screen/

/var/run/screen/:
total 1
drwxrwxr-x  4 root utmp   96 Mar  1  2005 .
drwxr-xr-x 10 root root  840 Feb  1 03:10 ..
drwx------  2 josh users  88 Jan 13 11:33 S-josh
drwx------  2 root root   48 Feb 11 10:50 S-root

/var/run/screen/S-josh:
total 0
drwx------ 2 josh users 88 Jan 13 11:33 .
drwxrwxr-x 4 root utmp  96 Mar  1  2005 ..
prwx------ 1 josh users  0 Feb 11 10:41 12931.pts-0.gentle

/var/run/screen/S-root:
total 0
drwx------ 2 root root 48 Feb 11 10:50 .
drwxrwxr-x 4 root utmp 96 Mar  1  2005 ..
Run Code Online (Sandbox Code Playgroud)

这是一个相当出色的Unixy用途,包含在文件系统权限中的Unix套接字,用于处理安全性,状态和流.

  • 我想知道为什么这个完美回答问题的答案却遭到否决...... (3认同)
  • 或者,如果您想根据命名约定获取特定屏幕,您可以 grep 结果。`ls -R /var/run/screen/S-root/ | grep“命名约定”`。屏幕以“<pid>.<screen_name>”格式保存。这对于 bash 脚本很有用。因此,如果您有一个名为“0000.NamingConvention”的屏幕,它实际上只会以易于解析的格式返回您正在查找的屏幕的名称。 (2认同)

MBK*_*MBK 35

简单的指南记住...

screen- 创建一个屏幕

screen -list- 列出所有分离(正在运行)的屏幕及其屏幕 ID。

在此输入图像描述 在这幅图片中 -

6764.pts-1.v1091330

是屏幕ID。

screen -x [screen id]- 连接/附加到特定的运行屏幕。

Ctrl + D- 在屏幕中时终止/停止屏幕运行。

Ctrl + A, Then press D- 在屏幕中时可以脱离屏幕而不打扰它。

killall screen- 分离或终止所有屏幕。


Zor*_*che 19

命令屏幕列表可能是您想要的.

男人


o0'*_*0'. 13

虽然joshperry的回答是正确的,但我发现它并没有告诉你屏幕名称(你用-t选项设置的那个),这实际上就是你用来识别会话的东西.(当然,这不是他的错,这是一个屏幕的缺陷)

这就是为什么我改为使用这样的脚本: ps auxw|grep -i screen|grep -v grep

  • 看看 -S 选项。提供的值存储在 unix 套接字文件名中,并且在 `ls` 输出中可见。如果需要,您也可以保留 -t 选项。 (2认同)

ski*_*inp 7

我不确定你的问题,但如果您真正想要的是列表当前打开的屏幕会话,请尝试:

screen -ls
Run Code Online (Sandbox Code Playgroud)


Ank*_*ain 6

 For windows system

 Open putty 
 then login in server
Run Code Online (Sandbox Code Playgroud)

如果要在Console中查看屏幕,则必须编写命令

 Screen -ls
Run Code Online (Sandbox Code Playgroud)

如果你必须访问屏幕,那么你必须使用以下命令

 screen -x screen id
Run Code Online (Sandbox Code Playgroud)

PWD在命令行中写入以检查您当前在哪个文件夹中


小智 5

不少人已经指出

$ screen -ls
Run Code Online (Sandbox Code Playgroud)

将列出屏幕会话。

这是另一个可能对您有用的技巧。

如果您将以下命令添加为服务器 xxx 上的.bashrc 文件的最后一行,那么它将在登录时自动重新连接到您的屏幕会话。

screen -d -r
Run Code Online (Sandbox Code Playgroud)

希望你觉得它有用。

  • 我想指出的是,您必须以启动屏幕的同一用户身份登录,我担心我的屏幕会话消失了,但我的文件副本仍在用户“media”下继续。这听起来可能合乎逻辑,但如果你监督它,可能会避免一些恐慌。 (2认同)

Obi*_*ahn 5

在大多数情况下,一个screen -RRx $username/就足够了:)

如果您仍想列出所有屏幕,请将以下脚本放在您的路径中,并将其命名为 screen 或任何您喜欢的名称:

#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
    exec /usr/bin/screen "$@"
else
    shopt -s nullglob
    screens=(/var/run/screen/S-*/*)
    if (( ${#screens[@]} == 0 )); then
        echo "no screen session found in /var/run/screen"
    else
        echo "${screens[@]#*S-}"
    fi
fi
Run Code Online (Sandbox Code Playgroud)

当将选项 -ls-all 作为第一个参数时,它的行为与 screen 完全一样,除了显示所有屏幕会话。