はじめに
Linux ターミナルは、ユーザーがコマンドラインインターフェイスを通じてオペレーティングシステムと対話できる強力なツールです。Linux ターミナルの重要な機能の 1 つは、基本的に実行中のプロセスであるジョブを管理および制御する能力です。このチュートリアルでは、Linux ターミナルのジョブの基本概念とそのアプリケーションを探り、ターミナルのジョブを一時停止および再開する手法を紹介します。
Linux ターミナルのジョブについて
Linux ターミナルは、ユーザーがコマンドラインインターフェイスを通じてオペレーティングシステムと対話できる強力なツールです。Linux ターミナルの重要な機能の 1 つは、基本的に実行中のプロセスであるジョブを管理および制御する能力です。このセクションでは、Linux ターミナルのジョブの基本概念とそのアプリケーションを探り、いくつかのコード例を紹介します。
Linux ターミナルのジョブとは?
Linux ターミナルでは、ジョブとはフォアグラウンドまたはバックグラウンドで実行中のプロセスを指します。ユーザーがターミナルでコマンドを実行すると、シェルはそのコマンドを実行するための新しいプロセスを作成し、このプロセスがジョブと見なされます。ジョブには、ユーザーが実行中のプロセスに入力を提供する対話型と、ユーザーの介入なしに実行される非対話型があります。
ジョブの表示と制御
Linux ターミナルには、ジョブを表示および制御するためのいくつかのコマンドが用意されています。
jobs: このコマンドは、現在のシェルセッションで実行中のすべてのジョブを一覧表示します。fg: このコマンドは、一時停止しているジョブをフォアグラウンドに戻し、ユーザーがそれと対話できるようにします。bg: このコマンドは、一時停止しているジョブをバックグラウンドで再開します。
これらのコマンドの使用方法の例を次に示します。
## Start a long-running process in the background
$ sleep 60 &
[1] 12345
## List the running jobs
$ jobs
[1]+ Running sleep 60 &
## Suspend the job by pressing Ctrl+Z
^Z
[1]+ Stopped sleep 60
## Resume the job in the background
$ bg
[1]+ sleep 60 &
## Bring the job to the foreground
$ fg
sleep 60
この例では、長時間実行される sleep 60 コマンドをバックグラウンドで起動し、Ctrl+Z を使用して一時停止し、bg を使用してバックグラウンドで再開し、その後 fg を使用してフォアグラウンドに戻しています。
ジョブ制御とプロセス階層
Linux ターミナルのジョブはプロセス階層の一部であり、各ジョブはシェルプロセスの子プロセスです。この階層により、次のような高度なジョブ制御手法が可能になります。
- ジョブとそのすべての子プロセスを終了する
- ジョブの状態とリソース使用量を監視する
- ジョブの入出力をリダイレクトする
プロセス階層は、pstree コマンドを使用して生成できるプロセスツリーを使用して視覚化できます。
graph TD
shell[Shell Process]
job1[Job 1]
job2[Job 2]
job3[Job 3]
shell --> job1
shell --> job2
shell --> job3
この例では、シェルプロセスが 3 つのジョブプロセスの親です。
Linux ターミナルのジョブとプロセス階層の概念を理解することで、ユーザーはコマンドやアプリケーションの実行を効果的に管理および制御でき、より効率的で生産的なワークフローを実現できます。
ターミナルのジョブの一時停止と再開
Linux ターミナルでは、ジョブを一時停止したり再開したりする機能は、ユーザーが実行中のプロセスをより効果的に管理できる強力な機能です。このセクションでは、ターミナルのジョブを一時停止して再開する際の概念と手法について説明します。
ジョブの一時停止
Linux ターミナルでジョブを一時停止するとは、その実行を一時中断し、後で再開したりバックグラウンドに移動したりできるようにすることです。これは通常、Ctrl+Z のキーボードショートカットを使用して行われ、これにより現在実行中のジョブに SIGTSTP シグナルが送信され、ジョブが停止します。
ジョブが一時停止されると、jobs コマンドを使用して一覧表示でき、ジョブの状態が「Stopped」と表示されます。この時点で、ユーザーは fg コマンドを使用してジョブをフォアグラウンドで再開するか、bg コマンドを使用してバックグラウンドに移動することができます。
例を次に示します。
## Start a long-running process
$ sleep 60
^Z
[1]+ Stopped sleep 60
## List the suspended job
$ jobs
[1]+ Stopped sleep 60
## Resume the job in the foreground
$ fg
sleep 60
## Suspend the job again
^Z
[1]+ Stopped sleep 60
## Move the job to the background
$ bg
[1]+ sleep 60 &
一時停止したジョブの再開
一時停止したジョブを再開するには、fg コマンドを使用してフォアグラウンドに戻すか、bg コマンドを使用してバックグラウンドで再開することができます。
ジョブがフォアグラウンドで再開されると、ユーザーは直接それと対話でき、入力を提供したり出力を監視したりすることができます。ジョブがバックグラウンドで再開されると、ユーザーの介入なしに実行が続行され、ユーザーはシェルプロンプトに戻って他のタスクを実行することができます。
ジョブが一時停止されて再開されると、その状態が保持され、ユーザーは一時停止したところからタスクを続行できることに注意することが重要です。
ターミナルのジョブを一時停止して再開する方法を理解することで、ユーザーはワークフローを効果的に管理し、長時間実行されるタスクを一時停止し、複数のプロセス間を切り替えることができ、より効率的で生産的なターミナル体験を得ることができます。
ジョブ制御の高度な手法
Linux ターミナルでジョブを管理するための基本的なコマンド(jobs、fg、bg など)は不可欠ですが、ユーザーが実行中のプロセスをより高度に制御するための手法もあります。このセクションでは、これらの高度なジョブ制御手法のいくつかを探ります。
ジョブの終了
ジョブを一時停止したり再開したりするだけでなく、ユーザーは kill コマンドを使用して実行中のジョブを終了することもできます。このコマンドは、ターゲットプロセスにシグナルを送信し、プロセスを正常にシャットダウンしたり強制終了したりするために使用できます。
## Start a long-running process
$ sleep 60 &
[1] 12345
## Terminate the job
$ kill %1
[1]+ Terminated sleep 60
この例では、ジョブ番号(%1)を指定して kill コマンドを使用し、バックグラウンドで実行中の sleep 60 プロセスを終了しています。
ジョブのスケジューリングと自動化
Linux ユーザーは、cron や at などのツールを使用して、特定の時間や間隔でジョブを実行するようにスケジューリングすることもできます。これにより、バックアップ、システムメンテナンス、データ処理などの繰り返しタスクを自動化することができます。
cron を使用してジョブをスケジューリングする例を次に示します。
## Edit the crontab
$ crontab -e
## Add a cron job to run a script every weekday at 8 AM
0 8 * * 1-5 /path/to/script.sh
この cron ジョブは、平日(月曜日から金曜日)の毎朝 8 時に script.sh スクリプトを実行します。
ジョブの監視とレポート
実行中のジョブの状態やリソース使用量を監視するために、ユーザーは top、htop、ps などのツールを利用できます。これらのツールは、システム上で実行中のプロセスに関する詳細な情報を提供します。これには、CPU やメモリの使用量、各プロセスに関連付けられたユーザーとコマンドが含まれます。
$ top
Tasks: 193 total, 1 running, 192 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3921036 total, 226748 free, 641124 used, 3053164 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 2666448 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12345 user 20 0 10.0m 2.4m 1.4m S 0.3 0.1 0:00.13 sleep
この top の出力には、先ほど起動した sleep ジョブを含む現在実行中のプロセスが表示されています。
これらの高度なジョブ制御手法を利用することで、Linux ユーザーは実行中のプロセスをより細かく制御し、繰り返しタスクを自動化し、アプリケーションのパフォーマンスとリソース使用量を監視することができ、より効率的で生産的なターミナル体験を得ることができます。
まとめ
このチュートリアルでは、Linux ターミナルのジョブの基本概念について学びました。これには、jobs、fg、bg などのコマンドを使用してジョブを表示および制御する方法が含まれます。また、Linux ターミナルにおけるジョブ制御とプロセス階層についても調べました。これにより、高度なジョブ管理手法が可能になります。これらのスキルを理解して適用することで、コマンドラインでの作業効率を向上させ、Linux 環境で実行中のプロセスを効率的に管理することができます。



