Linux screen セッションを終了する方法

LinuxBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、Linux Screen の基本について概説します。Linux Screen は、単一のウィンドウ内で複数のターミナルセッションを作成、管理、およびナビゲートできる強力なターミナルマルチプレクサです。Screen セッションの開始、デタッチ(detach)、および再アタッチ(reattach)の方法を学び、この汎用性の高いツールの実用的なアプリケーションを探求します。

Linux Screen の基本を理解する

Linux Screen は、単一のウィンドウ内で複数のターミナルセッションを作成、管理、およびナビゲートできる強力なターミナルマルチプレクサです。複数のコマンドやアプリケーションを同時に実行し、バックグラウンドで実行し続け、それらをシームレスに切り替える方法を提供します。

Linux Screen の主なユースケースの 1 つは、永続的なセッションを有効にすることです。これは、長時間実行されるプロセスを開始し、セッションからデタッチ(detach)し、後で別の場所やデバイスから再アタッチ(reattach)できることを意味します。これは、リモートサーバーの管理、自動化されたスクリプトの実行、または中断してはならない長時間実行されるプロセスを維持するなどのタスクに特に役立ちます。

Linux Screen のもう 1 つの重要な機能は、共有セッションをサポートする機能です。これにより、複数のユーザーが同じ Screen セッションに接続でき、コラボレーションとリモートアシスタンスが可能になります。これは、複数のチームメンバーが同じプロジェクトで作業したり、問題を一緒にトラブルシューティングしたりする必要があるシナリオで特に役立ちます。

Linux Screen の基本的な使用法を示すために、新しい Screen セッションを開始しましょう。ターミナルを開き、次のコマンドを入力します。

screen

これで、新しい Screen セッションに入ります。ターミナルの外観がわずかに異なっていたり、ウェルカムメッセージが表示されたりするため、Screen セッションにいることがわかります。

次に、この Screen セッション内で簡単なコマンドを実行してみましょう。top コマンドを使用して、実行中のプロセスを確認します。

top

システムのプロセスを表示する top の出力が表示されるはずです。

top - HH:MM:SS up  X days, HH:MM,  X users,  load average: X.XX, X.XX, X.XX
Tasks: XXX total,   X running, XXX sleeping,   X stopped,   X zombie
%Cpu(s):  X.X us,  X.X sy,  X.X ni, XX.X id,  X.X wa,  X.X hi,  X.X si,  X.X st
MiB Mem :  XXXX.X total,  XXXX.X free,   XXX.X used,  XXXX.X buff/cache
MiB Swap:     0.0 total,     0.0 free,     0.0 used.  XXXX.X avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   XXXX labex     20   0  XXXXXX  XXXXX  XXXXX S   X.X   X.X   X:XX.XX top
   XXXX labex     20   0  XXXXXX  XXXXX  XXXXX S   X.X   X.X   X:XX.XX zsh
   ...

top コマンドを終了するには、q を押します。

次に、この Screen セッションからデタッチ(detach)します。これにより、セッションはバックグラウンドで実行されたままになります。デタッチするには、Ctrl+A に続いて d を押します。

Ctrl+A, d

Screen セッションからデタッチされたことを示すメッセージが表示されるはずです。

[detached from ...]
Screen セッションからのデタッチの図

これで、元のターミナルセッションに戻ります。top コマンド(終了済み)を含む Screen セッションは、まだバックグラウンドで実行されています。

Screen セッションのリスト表示と再アタッチ

Screen セッションからデタッチ(detach)したので、実行中のセッションをリスト表示し、セッションに再アタッチ(reattach)する方法を学びましょう。

実行中のすべての Screen セッションをリスト表示するには、ターミナルで screen -ls コマンドを使用します。

screen -ls

デタッチされたセッションを示す、次のような出力が表示されるはずです。

There is a screen on:
        XXXXX.pts-X.labex       (Detached)
X Sockets in /run/screen/S-labex.

出力には、セッション ID(例:XXXXX.pts-X.labex)とそのステータス(Detached)が表示されます。

最後にデタッチされた Screen セッションに再アタッチするには、screen -r コマンドを使用します。

screen -r

これで、Screen セッションに戻るはずです。前のステップで top を終了したので、Screen セッション内に標準のターミナルプロンプトが表示される可能性があります。

Screen セッションへの再アタッチの図

複数の Screen セッションが実行されている場合は、screen -r コマンドの後にセッション ID を指定して、特定のセッションに再アタッチできます。たとえば、セッション ID が 12345 の場合は、次のように使用します。

screen -r 12345

この実験(Lab)では、セッションが 1 つしかない可能性が高いため、screen -r で十分です。

Screen セッションに戻ったので、正しく終了しましょう。これは、Screen セッション内で exit と入力することで実行できます。

exit

これにより、Screen セッションが終了し、元のターミナルに戻ります。

Screen セッションが閉じていることを確認するには、Screen セッションを再度リスト表示します。

screen -ls

Screen セッションが実行されていないことを示す出力が表示されるはずです。

No Sockets in /run/screen/S-labex.
実行中のセッションがないことを示す出力

Screen セッションの終了

前のステップでは、exit コマンドを使用して、セッション内から Screen セッションを終了する方法を学びました。ただし、セッションが応答しない場合や、再アタッチせずに単に閉じたい場合など、セッションの外から Screen セッションを終了する必要がある場合があります。

元のターミナルから特定の Screen セッションを終了するには、screen -X -S [session_id] quit コマンドを使用します。セッション ID が必要になります。これは screen -ls から取得できます。

まず、終了するセッションを用意するために、新しい Screen セッションを開始しましょう。

screen

次に、Ctrl+A, d を使用してこのセッションからデタッチ(detach)します。

Ctrl+A, d

実行中のセッションをリスト表示して、セッション ID を取得します。

screen -ls

出力からセッション ID(例:XXXXX.pts-X.labex)をメモします。

次に、screen -X -S [session_id] quit コマンドを使用してセッションを終了します。[session_id] をメモした実際の ID に置き換えます。

screen -X -S XXXXX.pts-X.labex quit

コマンドが成功した場合、出力は表示されません。

セッションが終了したことを確認するには、Screen セッションを再度リスト表示します。

screen -ls

Screen セッションが実行されていないことを示す出力が表示されるはずです。

No Sockets in /run/screen/S-labex.

この方法は、Screen セッションに直接アクセスできない場合に、強制的に終了するのに役立ちます。

Screen セッションの終了の図

まとめ

Linux Screen は、永続的なターミナルセッションを管理および維持するための貴重なツールです。Screen セッションの作成、デタッチ(detach)、リスト表示、再アタッチ(reattach)、および終了の方法を理解することで、長時間実行されるプロセスを実行したり、チームメンバーと共同作業したり、ターミナルに直接接続していなくても重要なタスクが継続して実行されるようにすることができます。このチュートリアルでは、Linux Screen の基本的な概念と実践的な例を取り上げ、生産性を向上させ、ターミナルベースのワークフローを効率化するための知識を身につけることができました。