web-dev-qa-db-ja.com

画面を強制終了します(すべての画面ではありません)

Ubuntuサーバーで複数の画面を実行していますが、次のように開始されます。

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

また、1つの画面を強制終了する必要がありますが、すべてを強制終了するわけではありません。その名前の単一の特定の画面を強制終了する正しいコマンドは何ですか? man pages を読みましたが、探しているコマンドが見つかりません。

また、このコマンドをbashスクリプトに書きたいので、単純にscreen -r screen1を押してから Ctrl+X いつものように。

19
BassKozz

Manページから:

   -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
19

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

特定の画面を強制終了します。

9
ℝaphink

defraaghのソリューションは私にとっては機能しませんが、Raphinkのアイデアを使用してスクリーンセッションを終了できます。

screen -listはプロセスIDを取得します

kill -9 PROCESSID

画面-SESSIONIDをワイプ

1
garconcn

同じ名前の画面が複数ある場合は、それらを一度に終了できます。

screen -ls  | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
  • コマンドscreen -lsは、プロセス番号とともに画面を印刷します。たとえば、4773.testは、プロセス番号477と名前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によってドット(。)として定義されます
  • 最後にコマンドxargs killは、パイプ|を介して送信された番号を持つすべてのプロセスを強制終了します。 xargsは、各入力に対してコマンドを実行するときに使用されます。
1
Mohsen Abasi

新しいウィンドウを開いて

Ctrl A + C

あなたはウィンドウを閉じます

Ctrl + D

またはウィンドウ内の終了コマンド

0
Thomas Webber

私はこれを次のように扱いました:

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

説明は、screen -lsの出力を取得し、grepを使用して興味のある特定の画面を見つけ、その文字列を変数processに割り当てることです。

screen -lsからの出力は常にPIDの後にピリオドが続くため、cutを使用してピリオドとその後のすべてを取り除くことができます。上記の例では、括弧で囲んでそれをkillコマンドに送りますが、一時ファイルへの書き込みとそこからの読み取りを直線的に行うこともできます。

画面名が一意であり、grepが強制終了する画面の名前のみを返すことを確認する必要があります。

0
unifex