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

时间:2009-02-11 17:47:34

标签: linux bash command-line gnu-screen

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

  1. ssh到服务器XXX
  2. 启动screen
  3. 在几个标签中开始实验
  4. 分离screen
  5. 与服务器断开连接
  6. 在实验运行期间,我可以ssh到所有服务器并列出我正在运行的流程(使用topps),轻松找到他们所在的服务器。

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

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

10 个答案:

答案 0 :(得分:371)

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

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

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

答案 1 :(得分:19)

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

请参阅man

答案 2 :(得分:13)

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

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

答案 3 :(得分:6)

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

screen -ls

答案 4 :(得分:6)

 For windows system

 Open putty 
 then login in server

如果您想在Console中看到屏幕,那么您必须编写命令

 Screen -ls

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

 screen -x screen id

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

答案 5 :(得分:3)

多人已经指出

$ screen -ls

会列出屏幕会话。

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

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

screen -d -r

希望你觉得它很有用。

答案 6 :(得分:3)

在大多数情况下,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作为第一个参数时。

答案 7 :(得分:0)

  

ps x | grep SCREEN

在您使用命令

的情况下查看该屏幕的运行情况
  

screen -A -m -d php make_something.php

答案 8 :(得分:0)

您可以使用以下命令。

from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime, timezone, timedelta

url = "https://www.basketball-reference.com/friv/injuries.fcgi"
html = urlopen(url)
soup = BeautifulSoup(html)

headers = [th.getText() for th in soup.findAll('tr', limit=2)[0].findAll('th')]

trs = soup.findAll('tr')[1:]
rows = []
for tr in trs:
    player_name = tr.find('a').text
    data = [player_name] + [x.text for x in tr.find_all('td')]
    rows.append(data)

injury_data = pd.DataFrame(rows, columns = headers)

(或)

screen -list

答案 9 :(得分:-3)

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

./experiment &

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

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