
時々私のスクリプトでエラーが発生し、同じ名前で複数のスクリーンセッションが作成されることがあります。 1つのコマンドでその名前のすべてのファイルを終了する方法はありますか?
Rx:/scripts# screen -S haydoz-script -X quit
There are several suitable screens on:
13372.haydoz-script (09/10/11 07:44:05) (Detached)
12287.haydoz-script (09/10/11 07:30:45) (Detached)
12230.haydoz-script (09/10/11 07:17:42) (Detached)
7824.haydoz-script (09/09/11 11:42:26) (Detached)
7764.haydoz-script (09/09/11 11:35:40) (Detached)
15753.haydoz-script (09/04/11 15:00:27) (Detached)
15744.haydoz-script (09/04/11 15:00:26) (Detached)
これ以外にも別の画面が実行されていますが、殺したくありません。
答え1
他の実行中のセッションがない場合は、screen
「ハード」メソッドを使用してkill
くださいkillall screen
。
親切にしたい場合は、スクリーンセッションリストを繰り返して1つずつ終了できます。
# screen -S foo && screen -S foo
[detached]
[detached]
# screen -ls
There are screens on:
8350.foo (Detached)
8292.foo (Detached)
2 Sockets in /tmp/screens/S-joschi.
# This is the interesting line. Just replace "foo" with the name of your session(s)
# for session in $(screen -ls | grep -o '[0-9]*\.foo'); do screen -S "${session}" -X quit; done
# screen -ls
No Sockets found in /tmp/screens/S-joschi.
答え2
screen -ls "$SESSION_NAME"
タブのインデント行に一致するセッションのフルネームを一覧表示します。したがって、行を繰り返してフルネームを抽出し、一致する名前ごとにquit
コマンドを呼び出すことができます。
SESSION_NAME='haydoz-script'
screen -ls "$SESSION_NAME" | (
IFS=$(printf '\t');
sed "s/^$IFS//" |
while read -r name stuff; do
screen -S "$name" -X quit
done
)
答え3
これは一行です。your_session
必要なものと交換する必要があります。
screen -ls your_session | grep -E '\s+[0-9]+\.' | awk -F ' ' '{print $1}' | while read s; do screen -XS $s quit; done
答え4
画面に接続し、別の画面コマンドを実行します。
screen -x "Name" -x -X kill