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

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

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

在实验运行的过程中,我可以很容易地find所有服务器上的服务器,并列出正在运行的进程(使用topps )。

但是,一旦实验完成后,我怎么能find在哪个服务器上打开一个屏幕会话(以便我可以看看输出,重新启动它们等)?

PS:我的实验也打印输出到文件,但是这不是我的问题的重点。

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

 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套接字包装在文件系统权限来处理安全,状态和stream。

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

看到那个男人

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

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

  For windows system Open putty then login in server 

如果你想在控制台中看到屏幕,那么你必须写命令

  Screen -ls 

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

  screen -x screen id 

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

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

 screen -ls 

在大多数情况下screen -RRx $username/将足以:)

如果你仍然想列出所有的屏幕,然后把下面的脚本放在你的path中,并把它称为屏幕或任何你喜欢的:

 #!/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作为第一个参数时。

多位人士已经指出

 $ screen -ls 

会列出屏幕会话。

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

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

 screen -d -r 

希望你觉得它有用。

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

 ./experiment & 

如果你问如何得到通知我做的工作,那么用邮件命令串起实验呢?

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