我在过去的项目中使用过不同的屏幕会话,因此积累了一些屏幕会话。现在我被要求从 Unix 框中删除多余/不必要的屏幕会话。它们都不是死会话 - 状态是分离的,而不是死的。操作系统是 Solaris。
我想到的一个方法是删除保存屏幕的文件夹/tmp/mylogin/screen-r/...
,但不确定这是否会在服务器上留下任何额外的进程或一些被动的东西。
我怎样才能将它们移除而不留下任何东西?
此外,这些分离的屏幕是否占用了相当多的资源,足以引起系统管理员的注意?也就是说,周围有几个未使用/分离的屏幕会话是否真的会引起任何问题?
答案1
列表显示类似于下面的输出
rajshah@rainbow:~$ screen -ls
There are screens on:
8105.pts-152.rainbow (Detached)
5587.work (Attached)
20462.rajshah (Attached) 3 Sockets in /var/run/screen/S-rajshah.
由于屏幕会话存储在 /var/run/screen/S-/
要删除任何会话,
rm -rf /var/run/screen/S-rajshah/8105.pts-152.rainbow
rajshah@rainbow:~$ screen -ls
There are screens on:
5587.work (Attached)
20462.rajshah (Attached) 3 Sockets in /var/run/screen/S-rajshah.
答案2
那么像这样的事情怎么样:
screen -ls | awk -F. '$NF~"(Attached)" {print "kill -HUP " $1}' | sh
| sh
如果您想查看它将要执行的操作,请忽略。
在我进行的快速测试中它似乎运行良好。
答案3
我知道这是一个老问题但是这就是我所做的
Named sessions : when i open screen to have meaningful name id for some stuffs im doing related to superuser.com
# screen -S superuser.com
.. < Ctrl + a + d > ..
# screen -ls
21668.superuser.com (Detached)
21664.otography.com (Detached)
17386.wimbledon (Detached)
17200.unsigned.com (Detached)
16956.tattooremo (Detached)
1082.refinedwater.co.uk (Detached)
27256.apple.com (Detached)
21481.careus.co.uk (Detached)
326.onlinebuziness.me.uk (Detached)
# screen -ls | grep "Detached" | awk '{ print $1; }' | cut -d'.' -f2- | xargs -I {} -n 1 screen -S {} -X quit
# screen -ls
No Sockets found in /var/run/screen/S-root.
正常会话名称:当我仅输入“screen”即可打开 screen 会话
#screen -ls
There are screens on:
11580.pts-0.server (Detached)
11571.pts-0.server (Detached)
2 Sockets in /var/run/screen/S-root.
# screen -ls | grep "Detached" | awk '{ print $1; }' | cut -d'.' -f1 | xargs -I {} -n 1 screen -S {} -X quit
# screen -ls
No Sockets found in /var/run/screen/S-root.
答案4
我遇到了一个用户这个问题。我首先运行这个命令来查看该用户打开了多少个屏幕会话:
*# ps aux | grep username > /detached_screens.txt**
(上述命令将查看正在运行的进程,而 grep 命令将帮助您缩小搜索范围,仅显示由该特定用户运行的进程。在 grep 用户名之后,我将其写入文件以供参考。您不必使用该部分)我发现了前几个月从未关闭过的 278 个分离屏幕会话。在找出每个分离屏幕的 PID 后,我运行了以下命令:
*# kill -9 PID PID PID PID PID ...
这将终止我指定的所有进程。