LinuC Level1 v10.0 対策コース(パート1)9/39
Linuxシステムにおけるプロセスの継続について
この記事では、ログアウトした状態でもプロセスを続行させる方法について説明します。ログアウトした後でもプロセスを続けたい場合は、そのジョブをバックグラウンドで実行する必要があります。
nohup
、 screen
、 tmux
などのコマンドを用いて、プロセスを継続する方法を学んでいきましょう。
プロセス
プロセスとは、システム内で実行中のプログラムのことを指します。 システム内では常に複数のプログラムが動作しており、それぞれが一つのプロセスとなります。ユーザーがプログラムを起動したり、PCが起動した際に新たなプロセスが生成されます。そのプログラムの処理が完了すると、対応するプロセスは終了します。
ジョブ
ジョブとは、コマンドライン一行で実行される処理の単位を表します。 ジョブはそれぞれのシェルにより個別に管理され、各ジョブには一意のIDが割り振られます。例えば、一つのコマンドラインで二つの処理を行う場合、それらは一つのジョブとして管理され、二つのプロセスがそのジョブに割り振られます。また、ジョブにはフォアグラウンドジョブとバックグラウンドジョブの二つのタイプが存在します。
バックグラウンドジョブ
ジョブをバックグラウンドで実行させたいときは、コマンドの最後に &
を付けます。これにより、プロセスの終了を待つことなく、次のプロンプトが表示され、次のコマンドを実行することができます。PCが起動している間ずっと実行されているジョブ、時間のかかる処理をバックグラウンドで実行したいとき、または複数のジョブを同時に実行したい場合などに使用されます。
nohup
nohup
コマンドをコマンドの先頭に付け、最後に &
を追加することで、ログアウト後も処理が継続されます。ログアウトしたり、端末が突然切断された場合でも、PCの電源が切れない限り、処理は続けられます。
処理を継続する仕組み
通常、端末が切断されると、シグナル番号1のSIGHUP(端末の切断によるプロセスの終了)がプログラムに対して送信され、これを受けたプログラムは処理を中断します。しかし、 nohup
と &
を付けてプログラムを実行すると、シグナル1のSIGHUPを無視するよう設定されます。その結果、ログアウトしたとしてもプログラムの処理は継続されます。
ここで、nohupはSIGHUPを無視する役割を、一方 &
は処理をバックグラウンドジョブとして実行する役割を担っています。
※ただし、zshを使用している場合は &
だけでは使用できません。この場合は nohup
を用いてください。
nohup
と &
の使用例
nohup コマンド &
screen
screen
は一つのウィンドウに対して複数のセッションを起動できるコマンドです。イメージとしては、Google Chromeなどのブラウザで複数のタブを開くことができる機能に似ています。ssh接続をしている時に別のセッションで作業していると、接続が切れてしまうことがあります。そんな時、 screen
で新しいセッションを作成すれば、元のセッションを保持したまま作業を続けることができます。
screen
も nohup
と同様に、ログアウトした後でもプロセスが継続します。 screen
コマンド自体はバックグラウンドで動作し、 screen
で開いた全てのウィンドウが閉じるまで、そのプロセスは続けられます。
screen操作
コマンド | 説明 |
---|---|
screen | 新しいセッションを作成 |
screen -S セッション名 | セッション名を指定して新しいセッションを作成 |
(ctrl + a) + d | 現在のセッションからデタッチ(離脱) |
screen -ls | 存在するセッション一覧を表示 |
screen -r セッション名 | 指定したセッションにアタッチ(接続) |
(ctrl + a) + n または (ctrl + a) + p | 次/前のセッションに移動 |
(ctrl + a) + (ctrl + a) | 直前のセッションに切り替え |
(ctrl + a) + S | 画面を上下に分割 |
(ctrl + a) + | | 画面を左右に分割 |
(ctrl + a) + tab | 分割画面の移動 |
(ctrl + a) + X | 現在の分割を解除 |
(ctrl + a) + [ | コピーモードに入る |
(ctrl + a) + ] | ペースト |
tmux
tmux
を使用すると、端末内で複数の作業領域を同時に管理することができます。 tmux
は「セッション」、「ウィンドウ」、「ペイン」の三つの概念を導入します。端末は複数のセッションを管理でき、各セッションは複数のウィンドウを持ち、また各ウィンドウはさらに複数のペインを持つことができます。さらに、 tmux
を使用すると、端末自体が終了しても、そのセッションを保持し続けることが可能です。
tmux
は nohup
と同様に、ログアウト後もプロセスの実行を継続します。これはセッションが常にバックグラウンドで実行されているためで、セッションが kill
されない限り、ログアウトしても再ログイン後にセッションに再接続(アタッチ)することが可能です。さらに、~/.tmux.conf ファイルを編集することでtmuxの設定をカスタマイズすることもできます。
セッション管理
コマンド | 説明 |
---|---|
tmux | セッションを起動 |
tmux new-session -s 名前 | セッションに名前を付けて起動 |
(Ctrl + b) + s | セッション一覧を表示 |
exit | セッションを終了 |
tmux kill-session -t 名前 | セッション名を指定して終了 |
(Ctrl + b) + d | セッションから一時的に中断(デタッチ) |
tmux attach | 中断していたセッションに戻る(アタッチ) |
tmux attach -t [セッション名] | セッション名を指定してアタッチ |
ウィンドウ管理
コマンド | 説明 |
---|---|
(Ctrl + b) + c | 新規ウィンドウを作成 |
exit | ウィンドウを削除 |
(Ctrl + b) + & | 現在のウィンドウを削除 |
(Ctrl + b) + 数字 | 数字で指定したウィンドウに移動 |
(Ctrl + b) + n | 次のウィンドウに移動 |
(Ctrl + b) + p | 前のウィンドウに移動 |
(Ctrl + b) + l | 以前のウィンドウに移動 |
(Ctrl + b) + ' | ウィンドウ番号を指定してそのウィンドウに移動 |
(Ctrl + b) + w | ウィンドウの一覧を表示 |
(Ctrl + b) + , | ウィンドウ名を変更 |
(Ctrl + b) + . | ウィンドウ番号を変更 |
ペイン操作
コマンド | 説明 |
---|---|
(Ctrl + b) + " | 上下にペインを分割 |
(Ctrl + b) + % | 左右にペインを分割 |
exit | ペインを終了 |
(Ctrl + b) + 矢印 | ペイン間のフォーカスを移動 |
(Ctrl + b) + o | 次のペインに移動 |
(Ctrl + b) + ; | 以前のペインに移動 |
まとめ
今回は、ログアウト状態でもプロセスを継続させる方法について、主にnohup、screen、tmuxの3つのコマンドを使った実装方法を紹介しました。
- nohupコマンドは、ユーザーがログアウトした後でもバックグラウンドでプロセスを継続できるようにするツールです。
- screenコマンドは、一つのウィンドウ内で複数のセッションを作成し、切り替えることが可能なツールです。これにより、接続が切れた場合でもセッションを維持し、プロセスを継続することが可能です。
- tmuxコマンドは端末を多重化し、複数のセッション、ウィンドウ、ペインを管理することが可能な強力なツールです。これにより、より複雑な作業や複数の作業を同時に管理することが可能となります。
記事の内容は理解できましたか?