LinuxおよびUnixシステムでは、ジョブは実行を開始し、まだ完了していないタスクとして定義されます。各タスクは基本的に、プロセスである実行中のプログラムです。
各ジョブには、ジョブ番号(ジョブID)と呼ばれる一意のIDが割り当てられます。ユーザーの介入なしにバックグラウンドでジョブを実行でき、現在のジョブとしてフォアグラウンドで実行することもできます。
このチュートリアルでは、Linuxでジョブを管理するためのfgおよびbgコマンドについて学習します。
bgコマンド
割り込み信号によって停止されたプロセスは、bgコマンドを使用してバックグラウンドで続行できます。
$ nautilus
^Z
[1]+ Stopped nautilus
このプロセスはctrl+z
で停止されました 割り込み信号。停止したプロセスは、jobsコマンドで確認できます。ただし、確認する前に、別のジョブを作成して停止信号で中断しましょう。
$ jedit
9:22:28 AM [main] [warning] jEdit: inifPLAF failed to set required l&f
9:22:29 AM [main] [warning] jEdit: inifPLAF failed to set required l&f
^Z
[2]+ Stopped jedit
$ jobs
[1]- Stopped nautilus
[2]+ Stopped jedit
ジョブのステータスが停止していることがわかります。プラス記号(+)は、現在のジョブを示します。マイナス記号(-)は、前のジョブを示します。ここで、停止したジョブをバックグラウンドで実行するには、bgコマンドを使用します。デフォルトでは、引数が指定されていない場合、bgは現在のジョブをバックグラウンドで実行します。
$ bg
[2]+ jedit &
$ jobs
[1]+ Stopped nautilus
[2]- Running jedit &
bgコマンドは、引数としてジョブ番号を受け取ることができます。ジョブ番号は、ジョブの出力の角かっこで示されます。
上記の例では、nautilusのジョブ番号は1です。したがって、このジョブ番号を使用して、バックグラウンドでジョブを実行します。 %
仕事番号を示すにはサインが必要です。
$ bg %1
[1]+ nautilus &
$ jobs
[1]- Running nautilus &
[2]+ Running jedit &
bgコマンドは、その名前でジョブを参照することもできます。例:%String
名前が指定された文字列と%?String
で始まるジョブを指します 名前に指定された文字列が含まれているジョブを指します。
説明のために、2つの停止したジョブがあります。
$ jobs
[1]+ Stopped nautilus
[2]- Stopped jedit
$ bg %nau
[1]+ nautilus &
$ jobs
[1]- Running nautilus &
[2]+ Stopped jedit
$ bg %?ed
[2]+ jedit &
$ jobs
[1]- Running nautilus &
[2]+ Running jedit &
fgコマンド
fgコマンドはbgコマンドに似ていますが、コマンドをバックグラウンドで送信する代わりに、コマンドをフォアグラウンドで実行し、現在の端末を占有して、プロセスが終了するのを待機する点が異なります。
# jobs
[1]- Stopped makewhatis
[2]+ Stopped vi
引数がない場合、fgは現在のジョブをフォアグラウンド(この場合はvi)で実行します。
# fg
vi
コマンドはフォアグラウンドで実行されているため、コマンドが終了するまでターミナルに戻りません。そのため、viが終了するため、jobsコマンドに表示されるジョブは1つだけになります。
# jobs
[1]+ Stopped makewhatis
# fg %1
makewhatis
# jobs
残りの仕事はありません。 bgのように、%String
および%?String
fgでも機能します。
# jobs
[1]- Stopped makewhatis
[2]+ Stopped vi
# fg %v
vi
# fg %?what
makewhatis
結論
このチュートリアルでは、いくつかの例を使用して、fgおよびbgコマンドを使用してジョブ制御を行う方法を学習しました。楽しんでいただければ幸いです。以下のコメントセクションに提案を残してください。