동일한 이름을 가진 여러 GNU 스크린 세션 종료

동일한 이름을 가진 여러 GNU 스크린 세션 종료

가끔 내 스크립트에 오류가 발생하여 동일한 이름으로 여러 개의 스크린 세션이 생성되는 경우가 있습니다. 하나의 명령으로 해당 이름을 가진 모든 파일을 종료하는 방법이 있습니까?

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.

친절하게 지내고 싶다면 스크린 세션 목록을 반복하여 하나씩 종료할 수 있습니다.

# 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

관련 정보