web-dev-qa-db-ja.com

Linuxでスクリーンプロセスを停止する方法は?

リモートサーバーでスクリプトを実行しています。 screenでスクリプトを実行しましたが、スクリプトを更新する必要があるため、完了する前に停止する必要があります。 screenから簡単にデタッチできますが、screenプロセスを強制終了する方法はありますか?

44
David

CTRL + aを押してから「k」を押すと、画面セッションが強制終了されます。

71
Nik

コマンドラインから特定の画面セッションを(非対話的に)終了する方法はいくつかあります。

1)「quit」コマンドを送信します。

screen -X -S "sessionname" quit

2)スクリプトを実行しているスクリーンセッションにCtrl-Cを送信します。

screen -X -S "sessionname" stuff "^C"

どちらの場合でも、 'screen -ls'を使用して、終了するスクリーンセッションのセッション名を見つける必要があります...実行中のスクリーンセッションが1つしかない場合、-Sを指定する必要はありません。セッション名」パラメータ。

34
troyfolger

これを使用して、バグのあるコマンドによって作成された数百の誤ったスクリーンセッションを終了しました。

for s in $(screen -ls|grep -o -P "1\d+.tty"); do screen -X -S $s quit; done;

ここで、_grep -o -P "1\d+.tty"_は、Perlに似た名前正規表現_"1\d+.tty"_でセッション名を取得するコマンドです。これは、番号_1_で始まるすべてのセッションをキャプチャし、その他の番号(_\d_)を持ちますそして_.tty_で終わる

警告:上記のコマンドを適用する前に、最初にこのコマンドでテストして、必要なセッションの正確なリストを取得することを確認する必要があります。これは、不要なセッションを終了しないようにするためです。

for s in $(screen -ls|grep -o -P "1\d+.tty"); do echo $s; done;

echoループ内のリスト、たとえば$()展開のサブコマンドによって生成されたリストが明確でない場合は、常にこのforテストを実行します。

3
biocyberman

以前の回答は、winputtyターミナルとAmazon sshサーバー接続では機能しませんでしたが、これは機能します。

screen -S yourscreentitlehere -X stuff $'\003'

参照:

2
mgear