1. 概要

GNU screenを使用すると、クリーンアップが必要なデタッチセッションになってしまうことがあります。このクイックチュートリアルでは、デタッチされたscreenセッションを強制終了するためのいくつかのオプションについて説明します。

2. セッションの一覧表示

既存のセッションを終了する方法について説明する前に、まず既存のセッションのリストを確認しましょう。 まず、いくつかのサンプル画面セッションを設定しましょう。 bashシェルで、次のように入力します。

% screen -dmS my_session_1
% screen -dmS my_session_2

これにより、my_session_1およびmy_session_2という名前の2つのセッションが作成されます。 どちらにも接続されていないことに注意してください( -d オプションのおかげで)。 それでは、作成したセッションを見てみましょう。

% screen -list

2つのセッションが表示されます。

There are screens on:
	84581.my_session_1	(Detached)
	76340.my_session_2	(Detached)

次に、これらのセッションを強制終了する方法について説明しましょう。

3. 画面セッションをアタッチして強制終了します

screen セッションを強制終了する1つの方法は、接続してから強制終了することです。 それでは、上記で作成した最初のセッションに接続しましょう。

% screen -r my_session_1

これで、コマンドプロンプトがセッション内に表示されます。 したがって、次のように入力できます。

% exit

セッションが終了し、次のように表示されます。

[screen is terminating]

これで、残りのセッションは1つだけになります。

% screen -list
There is a screen on:
	76340.my_session_2	(Detached)

画面セッションに複数のウィンドウがある場合、画面セッションが終了する前に、すべてのウィンドウでexit(またはCTRL + ak)を入力する必要があります。 より簡単な代替手段は、quitコマンドです。

CTRL+a \

(注: \キーを押している間はCTRL+aを押し続ける必要があります。)これにより、確認のプロンプトが表示されます。

Really quit and kill all your windows [y/n]

screen セッションを終了するために、すべてのセッションウィンドウを閉じることを選択します。

同じウィンドウでscreenセッションを作成したため、上記のシナリオは簡単です。 ここで、強制終了するセッションに別の端末またはユーザーが接続されている場合は、を接続するための別のコマンドが必要です。 現在のターミナルウィンドウで、新しいセッションを作成します。

% screen -S my_session_3

-S はセッションを作成し、それに接続します。 次に、2番目のターミナルウィンドウを開いて、screenセッションを一覧表示します。

% screen -list
There is a screen on:
	19643.my_session_3	(Attached)

最初の端末に接続されているため、これが「接続済み」になっていることに注意してください。 2番目のターミナルでは、セッションを強制的に最初のターミナルウィンドウから切り離し、2番目のターミナルに接続します。 2番目の端末で、次のように入力します。

% screen -D -R my_session_3

2番目の端末は画面セッションにあります。 最初の端末に警告が表示され、端末に戻ります。

[remote power detached]

これで、前のセクションで示したようにexitを使用できます。

4. 画面セッションをアタッチせずに強制終了します

セッションに接続してセッションを終了する代わりに、接続せずにscreenセッションを終了するいくつかの方法を見てみましょう。

まず、殺すためのセッションをいくつか作成しましょう。

% screen -dmS my_session_4
% screen -dmS my_session_5

これで、2つのセッションが作成されました。

% screen -list
There are screens on:
	19665.my_session_4	(Detached)
	19671.my_session_5	(Detached)

これで、 screenコマンド引数-Xを使用して、実行中のscreenセッションにコマンドを送信できます。 -S を使用すると、コマンドを受信するセッションを指定できます。 したがって、quitコマンドをmy_session_4に送信するには、次を使用します。

% screen -S my_session_4 -X quit

screen -list には、現在のセッションが表示されます。

% screen -list
There is a screen on:
	19671.my_session_5	(Detached)

最後に、OSコマンドを介していつでもスクリーンセッションを強制終了できます。 名前の前に付けられた数字は、screenセッションのPIDです。 最後のセッションを強制終了するには、killを使用できます。

% kill 19671

画面セッションを今すぐ確認すると、次のように表示されます。

% screen -list
No Sockets found in /var/folders/wr/129xvd3dfecl/T/.screen.

5. 結論

この記事では、切り離されたscreenセッションを強制終了するさまざまな方法について説明しました。