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


19

Ubuntuサーバーで実行されている複数の画面があり、それらは次のように開始されます。

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

そして、私は1つの画面を殺す必要がありますが、それらすべてを殺す必要はありません。特定の画面をその名前で強制終了する正しいコマンドは何ですか?マニュアルページを読みましたが、探しているコマンドが見つからないようです。

また、このコマンドをbashスクリプトに書き込みたいので、通常のように単純screen -r screen1Ctrl+ Xを押すことはできません。


申し訳ありませんが、これが第二のためにドンキーコングについてだと思った
Chopper3

私は、このTシャツが大好きohgizmo.com/wp-content/uploads/2008/11/...
Chopper3

それはいいティーである彼らは、「香港の王」見てきた場合を除き、ほとんどの人は、それをあなたを取得することはできません。imdb.com/title/tt0923752
BassKozz

フレーズのオブジェクトの正しい単語は「thee」です。
追って通知があるまで一時停止します。

3
あなたはここで「それを手に入れなさい」と言い、下に「ありがとう」と言いました。それは「あなたのためにそれを手に入れなさい」と「あなたに感謝しなさい」であるべきです。
追って通知があるまで一時停止します。

回答:


19

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

完璧!!! defraaghのおかげで、mustaはその男性を見逃しました。
BassKozz 09

知っておきたいこと:-)
チャフィンク2009

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.

そこから、KILLシグナルをこの特定のPIDに送信するだけです。

$ kill 12281

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


bashスクリプトから実行しているため、これは機能しません。正しい画面に一致するscreen -listからPIDを取得する必要はありません。上記のdefraaghの答えは魅力的でした。ありがとう。
BassKozz 09

わかりました、defraaghが完璧な解決策を持っていたことは良いことです。
チャフィンク

1

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

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

kill -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によってドット(。)として定義されます
  • 最後に、コマンドxargs killは番号がパイプ|経由で送信されたすべてのプロセスを強制終了します。xargs各入力でコマンドを実行する場合に使用されます。


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.