リモートサーバーでスクリプトを実行しています。 screen
でスクリプトを実行しましたが、スクリプトを更新する必要があるため、完了する前に停止する必要があります。 screen
から簡単にデタッチできますが、screen
プロセスを強制終了する方法はありますか?
CTRL + aを押してから「k」を押すと、画面セッションが強制終了されます。
コマンドラインから特定の画面セッションを(非対話的に)終了する方法はいくつかあります。
1)「quit」コマンドを送信します。
screen -X -S "sessionname" quit
2)スクリプトを実行しているスクリーンセッションにCtrl-Cを送信します。
screen -X -S "sessionname" stuff "^C"
どちらの場合でも、 'screen -ls'を使用して、終了するスクリーンセッションのセッション名を見つける必要があります...実行中のスクリーンセッションが1つしかない場合、-Sを指定する必要はありません。セッション名」パラメータ。
これを使用して、バグのあるコマンドによって作成された数百の誤ったスクリーンセッションを終了しました。
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
テストを実行します。
以前の回答は、winputtyターミナルとAmazon sshサーバー接続では機能しませんでしたが、これは機能します。
screen -S yourscreentitlehere -X stuff $'\003'
参照: