查找所有空闲屏幕

查找所有空闲屏幕

我过去已经启动了一些通过screen命令启动的进程。大多数脚本已经完成运行,但看起来屏幕仍然闲置。当我执行 aps aux | less查看所有进程时,我可以看到它们。

我如何查看所有screens 以及它们中是否有活动脚本正在运行。

谢谢

答案1

要查看当前正在运行的屏幕列表:

screen -list

屏幕名称的第一部分是其 PID。要查看从该父进程生成的当前正在运行的进程树,请运行:

pstree <PID>

或者,为了获得更详细的输出,

pstree -a <PID> | less

要重新连接到屏幕(如果已连接到其他地方,则将其分离),请运行:

screen -rd <PID>

一旦确定不再需要某个屏幕,要终止它,您有几个选择。如果您当前连接到屏幕,则只需使用Ctrl+ a, k,这将杀死屏幕及其所有窗口。

或者,如果您未加入会话,则可以使用:

kill <PID>
screen -wipe <PID>

杀死它并将其从屏幕列表中删除。

答案2

您可以screen通过在脚本完成时终止 shell 来防止脚本完成后闲置:

script.sh; exit

或者,如果您想有机会查看错误消息,您可以运行

script.sh && exit

这样,只有成功完成screen才会关闭。script.sh

答案3

使用这个管道我可以获得与非活动屏幕对应的 PID 列表

screen -list | sed '1d;$d' | sed -r 's/^[^[0-9]]*([0-9]*).*$/\1/' | xargs -n1 pstree -p | sed -r 's/.*bash\(([0-9]+)\)$/\1/' | grep "^[0-9]*$"

例如:

> screen -list

There are screens on:
    8988.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 09:02:14 PM)    (Detached)
    8960.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 09:01:40 PM)    (Detached)
    8927.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 09:01:02 PM)    (Detached)
    8903.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 09:00:42 PM)    (Detached)
    8857.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 08:59:30 PM)    (Detached)
    8831.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 08:59:01 PM)    (Detached)
6 Sockets in /var/run/screen/S-user.

> screen -list | sed '1d;$d' | sed -r 's/^[^[0-9]]*([0-9]*).*$/\1/' | xargs -n1 pstree -p

screen(8988)───bash(8989)
screen(8960)───bash(8961)
screen(8927)───bash(8928)
screen(8903)───bash(8904)
screen(8857)───bash(8858)───python(8877)───{python}(8881)
screen(8831)───bash(8832)───python(8851)───{python}(8855)

前 4 个是不活动的,所以接下来就是挑选这些 PID 的问题,这可以通过sed -r 's/.*bash\(([0-9]+)\)$/\1/' | grep "^[0-9]*$"

这样做的好处是我可以用一行杀死所有非活动屏幕:

screen -list | sed '1d;$d' | sed -r 's/^[^[0-9]]*([0-9]*).*$/\1/' | xargs -n1 pstree -p | sed -r 's/.*bash\(([0-9]+)\)$/\1/' | grep "^[0-9]*$" | xargs -n1 kill

相关内容