如何从列表中重新附加和关闭多个屏幕会话

时间:2009-09-28 07:44:47

标签: linux unix gnu-screen

我是Ubuntu 9.04用户。给出一系列屏幕会话,如下所示:

9076.pts-30.moe (09/27/2009 11:30:08 PM)    (Attached)
8778.pts-24.moe (09/27/2009 11:29:46 PM)    (Detached)
8674.pts-0.moe  (09/27/2009 11:29:25 PM)    (Attached)
22649.pts-28.moe    (09/27/2009 11:51:46 AM)    (Detached)
22543.pts-24.moe    (09/27/2009 11:50:56 AM)    (Detached)
22228.pts-16.moe    (09/27/2009 11:49:59 AM)    (Detached)

如何根据时间标准关闭多个屏幕?例如,所有屏幕在中午12:00之前启动。我通常会输入:

    screen -dr 22649.pts-28.moe
    exit
    ...

并手动关闭每一个,但这很乏味。提前谢谢。

3 个答案:

答案 0 :(得分:2)

以下是我杀死所有分离屏幕的方法:

screen -ls | grep Detached | awk -F" " '{print $1}' | xargs -I{} screen -X -S {} kill

如果您想要强行杀死所有屏幕,只需将grep Detached上方更改为grep tached即可。至少对我来说都很有用!

对于时间标准,您可以从这开始:

screen -ls | grep Detached | awk -F " " '{print $2,$3,$4","$1}'

这打印类似于:

(01/03/2012 02:10:42 AM),4504.test2
(01/03/2012 02:10:12 AM),4445.test1
(01/03/2012 02:02:58 AM),4333.test0

其中第一个组是时间戳并用逗号分隔,是PID.name。

所以你可以使用/ pipe到awk(或awk -F"," '{print $1}'再次仅在括号中提取时间戳)来解析括号内的时间..记住,screen -ls总是最后列出最早的屏幕!

我还没弄明白如何自己做时间标准过滤,如果可以的话,我将来会编辑这个...好运好友!

答案 1 :(得分:1)

您可以使用-X参数将命令发送到屏幕。所以你可以通过说“screen -S 22649.pts-28.moe -X quit”从命令行关闭一个屏幕。

要按时间选择屏幕,我猜你必须运行一个脚本来比较时间。

就个人而言,我会在python中使用os.popen()和time.strptime()。

答案 2 :(得分:1)

点之前的数字(示例中为22649)是屏幕进程的PID。只需杀死它(kill 22649