화면을 종료 (모든 화면이 아님)


19

우분투 서버에서 여러 화면이 실행 중이며 다음과 같이 시작됩니다.

screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...

그리고 한 화면을 죽여야하지만 전부는 아닙니다. 이름을 가진 하나의 특정 화면을 종료하는 올바른 명령은 무엇입니까? 매뉴얼 페이지를 읽었 지만 원하는 명령을 찾지 못하는 것 같습니다.

또한이 명령을 bash 스크립트에 작성하여 평소처럼 + screen -r screen1를 누를 수는 없습니다 .CtrlX


죄송합니다, 이것이 1 초 동안 Donkey Kong에 관한 것이라고 생각
Chopper3

이 티셔츠를 좋아합니다 ohgizmo.com/wp-content/uploads/2008/11/…
Chopper3

멋진 티입니다. "The King of Kong"을 보지 않으면 대부분의 사람들은 그것을 얻지 못합니다 : imdb.com/title/tt0923752
BassKozz 2009

문구의 대상에 대한 올바른 단어는 "thee"입니다.
추후 공지가있을 때까지 일시 중지되었습니다.

3
당신은 여기에 "당신이 그것을 얻습니다"라고 말하고 아래에 "감사합니다"라고 말했습니다. "당신을 위해 그것을 얻으십시오"와 "감사합니다."
추후 공지가있을 때까지 일시 중지되었습니다.

답변:


19

매뉴얼 페이지에서 :

   -X   Send the specified command to a running screen  session.  You  can
        use  the  -d or -r option to tell screen to look only for attached
        or detached screen sessions. Note that this command  doesn't  work
        if the session is password protected.

넌 할 수있어 :

        screen -X -S <sessionid> kill

완전한!!! 고마워 defraagh, 머 스타는 그 남자에서 그것을 놓쳤다.
BassKozz 2009

알아두면 좋은 점 :-)
ℝaphink

9

를 수행하면 screen -list각 화면 이름이 화면의 PID 인 숫자로 시작한다는 것을 알 수 있습니다.

 $ screen -list
There are screens on:
        12281.pts-1.jonah       (12/21/2009 07:53:19 PM)        (Attached)
        10455.pts-1.jonah       (12/19/2009 10:55:25 AM)        (Detached)
2 Sockets in /var/run/screen/S-raphink.

거기 에서이 특정 PID로 KILL 신호를 보내십시오.

$ kill 12281

특정 화면이 종료됩니다.


이것은 bash 스크립트에서 실행하기 때문에 작동하지 않으며 올바른 화면과 일치하는 screen-list에서 PID를 가져올 필요가 없습니다 ... 위의 defraagh의 대답은 매력처럼 작동했습니다. 고마워
BassKozz 2009

좋아, defraagh가 완벽한 솔루션을 가지고 있다는 것이 좋습니다.
ℝaphink

1

defraagh의 솔루션이 작동하지 않지만 Raphink의 아이디어를 사용하여 스크린 세션을 종료 할 수 있습니다.

screen -list 프로세스 ID를 얻습니다

-9 PROCESSID를 죽이십시오

화면 지우기 SESSIONID


1

이름이 같은 여러 화면이있는 경우 한 번에 화면을 종료 할 수 있습니다.

screen -ls  | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
  • 명령 screen -ls은 프로세스 번호와 함께 화면을 인쇄합니다. 예를 들어, 4773.test 는 프로세스 번호가 4773 이고 이름이 test 인 화면입니다 . 샘플 출력 :

    6322.ss      (05/23/2018 10:39:08 AM)        (Detached)
    6305.sc  (05/23/2018 10:38:40 AM)        (Detached)
    6265.ScreenName       (05/23/2018 10:37:59 AM)        (Detached)
    6249.ScreenName  (05/23/2018 10:37:50 AM)        (Detached)
    6236.scc        (05/23/2018 10:37:42 AM)        (Detached)
  • egrep파이프 라인을 통해 전송 된 샘플 텍스트 위의 명령 필터 | .

  • 명령 awk -F "." '{print $1}'은 각 줄의 첫 번째 열을 추출합니다. 열 사이의 구분 기호는 옵션 -F에 의해 점 (.) 으로 정의됩니다 .
  • 마지막으로 command xargs kill는 번호가 pipe |를 통해 전송 된 모든 프로세스를 종료합니다. xargs각 입력에 대해 명령을 실행하려고 할 때 사용됩니다.

0

당신은 새 창을 엽니 다

Ctrl A + C

당신은 창을 닫습니다

Ctrl + D

또는 창 내에서 종료 명령


0

나는 이것을 다음과 같이 다루었 다.

process=$(screen -ls | grep screen1)
kill $(echo $process | cut -f1 -d'.')
exit

설명은 screen -lsgrep을 사용하여 관심있는 특정 화면 의 출력을 찾아서 해당 문자열을 변수에 할당한다는 것 process입니다.

의 출력 screen -ls은 항상 PID 다음에 마침표가 있으므로 cut을 사용하여 마침표와 그 이후의 모든 것을 제거 할 수 있습니다. 위의 예제에서 우리는 그것을 괄호 안에 넣고 kill 명령에 공급합니다. 임시 파일에 쓰고 그것을 읽는 것을 포함 할 수 있습니다.

화면 이름이 고유하고 grep이 종료하려는 화면 이름 만 리턴하는지 확인해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.