Ubuntuサーバーで複数の画面を実行していますが、次のように開始されます。
screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...
また、1つの画面を強制終了する必要がありますが、すべてを強制終了するわけではありません。その名前の単一の特定の画面を強制終了する正しいコマンドは何ですか? man pages を読みましたが、探しているコマンドが見つかりません。
また、このコマンドをbashスクリプトに書きたいので、単純にscreen -r screen1
を押してから Ctrl+X いつものように。
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
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
特定の画面を強制終了します。
defraaghのソリューションは私にとっては機能しませんが、Raphinkのアイデアを使用してスクリーンセッションを終了できます。
screen -listはプロセスIDを取得します
kill -9 PROCESSID
画面-SESSIONIDをワイプ
同じ名前の画面が複数ある場合は、それらを一度に終了できます。
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
は、各入力に対してコマンドを実行するときに使用されます。新しいウィンドウを開いて
Ctrl A + C
あなたはウィンドウを閉じます
Ctrl + D
またはウィンドウ内の終了コマンド
私はこれを次のように扱いました:
process=$(screen -ls | grep screen1)
kill $(echo $process | cut -f1 -d'.')
exit
説明は、screen -ls
の出力を取得し、grepを使用して興味のある特定の画面を見つけ、その文字列を変数process
に割り当てることです。
screen -ls
からの出力は常にPIDの後にピリオドが続くため、cutを使用してピリオドとその後のすべてを取り除くことができます。上記の例では、括弧で囲んでそれをkillコマンドに送りますが、一時ファイルへの書き込みとそこからの読み取りを直線的に行うこともできます。
画面名が一意であり、grepが強制終了する画面の名前のみを返すことを確認する必要があります。