Linux中删除全部的screen任务

2014-10-29 23:03:59
如果Linux系统中运行着多个screen session,想一次全部退出的话,那么有两种办法,一种是一个个的退出,一种就是批量退出。

Linux中的screen命令是一个很有用的工具,它的功能挺强大,能够在一个终端连接断开以后仍然能够保持任务的运行。

举个例子来说,我们通过ssh远程登录到linux服务器上执行某个任务,

这个任务需要很长的时间才能执行完成,比如需要5个小时,而这时你碰巧要下班了,不能等程序执行完成再走,

也不能不关电脑就走。

这种场景下,screen就可以派上用场了。


关于screen的用法,网上有很多文章,这里简单说一下:


1、screen -ls 列出当前系统中运行的session

下面说明,我的系统中有三个session正在运行。


[root@li402-41 ~]# screen -ls 

There are screens on: 

29486.edm__10000 (Detached) 

29910.edm__20000 (Detached) 

29562.edm_30000(Detached)


2、结束一个session


有两种方法

一种是,通过screen -r pid 或者 screen -r name先进入该session中,然后exit即可

一种是,通过screen -S edm_10000 -X quit命令,不进入该session中,直接退出


当然也可以直接 kill pid的方式结束一个session,

killall screen 结束所有的session会话


3、结束多个session

如果你的系统里有多个session同时在运行,有没有办法全部退出呢?

当然,你可以一个一个的session退出,只是麻烦了一点。


我们也可以通过组合命令,一次全部退出


screen -ls | grep -i detached | cut -d. -f1 | tr -d [:blank:]| xargs kill

screen -ls | grep Detached | cut -d. -f1 | awk ‘{print $1}’ | xargs kill

如果您的pid都是五位数的话

screen -ls | grep -o "[0-9]\{5\}" | xargs kill


这两行命令的意思都差不多,通过管道,找到每个session的pid,然后作为 kill的参数,直接杀掉该进程

screen -ls : 列出所有的screen session

grep Detached : 过滤出Detached的session

cut -d. -f1 :用.分割,取第一部分,也就是 pid

awk和tr都是去掉前面的空白符的

xargs :就是把每一行作为 kill 的参数执行