268

我有一堆服务器,我使用screen. 程序如下:

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

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

但是,一旦实验完成,我如何才能找到在哪些服务器上打开了屏幕会话(以便我可以查看输出、重新启动它们等)?

PS:我的实验也将它们的输出打印到文件中......但这不是我问题的重点。

4

11 回答 11

479

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

screen -ls

要查看特定机器上的所有屏幕会话,您可以执行以下操作:

ls -laR /var/run/screen/

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

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 ..

这是一个相当出色的 Unixy 使用 Unix 套接字包装在文件系统权限中来处理安全、状态和流。

于 2009-02-11T17:56:04.973 回答
22

命令screen -list可能是您想要的。

于 2009-02-11T17:55:04.287 回答
13

虽然 joshperry 的回答是正确的,但我发现它没有告诉您屏幕名称(您使用 -t 选项设置的名称)非常烦人,这实际上是您用来识别会话的名称。(当然不是他的错,那是屏幕的缺陷)

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

于 2010-08-25T08:48:55.433 回答
10

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

screen -ls
于 2009-02-11T17:55:55.283 回答
8
 For windows system

 Open putty 
 then login in server

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

 Screen -ls

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

 screen -x screen id

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

于 2013-11-22T10:51:38.177 回答
6

简单的指南要记住...

screen- 创建屏幕

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

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

6764.pts-1.v1091330

是屏幕 ID。

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

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

Ctrl + A, Then press D- 在屏幕中从屏幕上分离而不会打扰它。

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

于 2021-09-27T16:43:15.723 回答
5

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

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

#!/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

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

于 2012-03-02T17:40:09.703 回答
4

很多人已经指出

$ screen -ls

将列出屏幕会话。

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

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

screen -d -r

希望你觉得它有用。

于 2009-02-11T23:01:59.570 回答
1

您可以使用以下命令。

screen -list

(或者)

screen -R
于 2021-08-02T15:26:55.490 回答
0

ps x | grep 屏幕

如果您使用该命令,请查看该屏幕正在运行什么

屏幕 -A -m -d php make_something.php

于 2018-04-22T22:12:31.820 回答
-4

所以你使用屏幕来保持实验在后台运行,还是什么?如果是这样,为什么不直接在后台启动它呢?

./experiment &

如果您要问如何通知我完成的工作,如何将实验与邮件命令串在一起?

./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"
于 2009-02-11T17:58:23.437 回答