首页 文章

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

提问于
浏览
199

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

  • ssh 到服务器XXX

  • 发布 screen

  • 在几个标签中开始实验

  • detach screen

  • 与服务器断开连接

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

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

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

9 回答

  • 6

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

    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套接字,用于处理安全性,状态和流 .

  • 3

    命令 screen -list 可能就是你想要的 .

    man

  • 19

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

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

  • 13

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

    screen -ls
    
  • 6
    For windows system
    
     Open putty 
     then login in server
    

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

    Screen -ls
    

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

    screen -x screen id
    

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

  • 367

    在大多数情况下 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作为第一个参数时,除了显示所有屏幕会话外,它的行为与屏幕完全相同 .

  • -3

    多个人已经指出了这一点

    $ screen -ls
    

    会列出屏幕会话 .

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

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

    screen -d -r
    

    希望你觉得它有用 .

  • 3

    ps x | grep SCREEN

    在您使用该命令的情况下查看该屏幕的运行情况

    screen -A -m -d php make_something.php

  • 0

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

    ./experiment &
    

    如果你问如何获得通知我完成的工作,那么如何将实验与邮件命令串联起来呢?

    ./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"
    

相关问题