web-dev-qa-db-ja.com

Unixで多くの切り離された画面セッションを削除するにはどうすればよいですか?

私は過去のプロジェクトでさまざまなスクリーンセッションに取り組んできたので、いくつかのスクリーンセッションを蓄積しています。今、私はUnixボックスから余分な/不必要なスクリーンセッションを削除するように頼まれました。それらのどれもデッドセッションではありません-ステータスはデタッチされており、デッドではありません。 OSはSolarisです。

私の頭に浮かんだ方法の1つは、画面が/tmp/mylogin/screen-r/...フォルダーに保持されているフォルダーを削除することですが、それによってサーバーに余分なプロセスや何かが受動的に残るかどうかはわかりません。

何も残さずに削除するにはどうすればよいですか?

また、これらの切り離された画面は、システム管理者に警告するのに十分な、かなりのリソースを占有しますか?つまり、未使用/切り離された画面セッションがいくつかあることによって実際に問題が発生することはありますか?

2
nitin

このようなものはどうですか:

screen -ls | awk -F. '$NF~"(Attached)" {print "kill -HUP " $1}' | sh

何が実行されるかを確認したい場合は、| shを省略してください。

私が行った簡単なテストではうまくいくようです。

2
Philip Kearns

私はその古い質問を知っていますが、これが私がしたことです

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 -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.
1
satch_boogie

以下の出力のようなリスト表示

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.
1
GC 13

安全な方法は、最初にscreenプロセスを強制終了してから、追加したオプションを指定してscreenコマンドを実行することだと思います。

#ps  -ef|grep screen|grep  -v  grep 

root  8362     1   0 21:20:38 ?           0:00 screen


# screen -ls
There are screens on:
        8363.pts-19.   (Dead ???)
        8262.8  (Attached)
Remove dead screens with 'screen -wipe'.
2 Sockets in /root/.screen.

#kill -9 8262

# screen -wipe
There are screens on:
        8362.pts-19   (Removed)
        8263.8  (Removed)
2 sockets wiped out.

ユーザーにこの問題が発生しました。最初にこのコマンドを実行して、そのユーザーが開いている画面セッションの数を確認しました。

*# ps aux | grep username > /detached_screens.txt**

(上記のコマンドは実行中のプロセスを確認し、grepコマンドは、その特定のユーザーによって実行されたプロセスのみを表示するように検索を絞り込むのに役立ちます。grepユーザー名の後に、参照用にファイルに書き込みます。その部分を使用する必要があります)前月から閉じられたことのない278の切り離された画面セッションが見つかりました。切り離された各画面のPIDを把握した後、次のコマンドを実行しました。

*# kill -9 PID PID PID PID PID ...

これにより、指定したすべてのプロセスが強制終了されました。

0
MasterShake36