Linuxのjobsコマンドを使用すると、ユーザーは現在のシェルのプロセスと直接対話できます。
Linuxでは、ジョブには、フォアグラウンド、バックグラウンド、および停止の3つの状態が考えられます。
どういう意味ですか?もう少し説明します。まず、Jobsコマンドに組み込まれているツールのいくつかを見てみましょう。
ジョブ制御にはいくつかの異なる機能があります。それぞれを独立して実行できます。これは、ジョブ制御に関連するコマンドの表です。
コマンド | 説明 |
---|---|
ジョブ | 現在のシェルのジョブを一覧表示します |
bg%n | プロセスをバックグラウンドに送信 |
fg%n | プロセスをフォアグラウンドにする |
表では、 n 対応するジョブIDの番号を表します。
Linuxでのジョブ制御について
とにかく仕事は正確には何ですか?ジョブ、プロセス、およびタスクは、同じ意味で使用されることが多い単語です。
実際には、明確にするために重要ないくつかの小さな違いがあります。
違いは、どのエンティティがタスクを処理しているかに要約できます。ユーザーはジョブを所有し、カーネルはプロセスを所有します。
Linuxでは、ジョブは単一のプロセスである場合もあれば、多数の子またはサブプロセスを持つ場合もあります。
この例として、次のようないくつかのパイプコマンドを備えたジョブがあります。
cat file1 | sort | uniq
ファイルの出力を解析し、sortコマンドとuniqコマンドの組み合わせを使用してuniq値をソートします。
パーソナルコンピューティングでは、オペレーティングシステムがほとんどのプロセスを自動的に処理します。これは通常、システムのニーズまたは特定のタスクに与えられた優先順位に合わせて最適化されます。これらのプロセスはカーネルによって完了され、プロセスID(PID)が与えられます。
Linuxでジョブを制御する方法
新しいシェルを開くと、独自のジョブを作成することができます。実際、これは、任意のコマンド(または一連のコマンド)を端末に入力したときに発生することです。
ユーザーレベルでは、シェルから手動でジョブを送信してバックグラウンドで作業したり、フォアグラウンドに移動したり、一時停止したりできます(Ctrl + zを使用)。
それでは、これまでに学んだことをいくつかの例を挙げて実践してみましょう。
例1:ジョブをバックグラウンドに送信する
バックグラウンドで作業するためにジョブを送信するのは簡単です。コマンドに&を追加するだけです (アンパサンド)記号。
[email protected]:~$ nano Linux_Handbook &
[1] 2860
このコマンドが括弧内のジョブ番号を返すことがわかります。次の番号は、カーネルが使用するプロセスIDです。
例2:ジョブの表示
jobsコマンドを入力しようとすると、何も起こらなかったように見えると混乱する可能性があります。これは、シェルにアクティブなジョブがなかったためです。これでジョブが実行されたので、jobsコマンドを正常に実行できます。
[email protected]:~$ jobs
[1]+ Stopped nano Linux_Handbook
PID番号はここには記載されていませんが、必要ありません。ユーザー/シェル固有のジョブIDを使用してジョブを制御します。
例3:ジョブをフォアグラウンドにする
そのジョブIDを使用して、nanoのインスタンスを前面に表示できます。
[email protected]:~$ fg %1
フォローしている場合は、Linuxハンドブックという名前のファイルを使用してNanoにアクセスできるはずです。
例4:Ctrl+zでジョブを停止する
Ctrl + zを使用して、開いているジョブを停止できます。これをtopで使用する方法を示すスクリーンショットを次に示します。
スクリーンキャストでは、私が上を開いているのを見て、Ctrl + zを使用して一時停止し、ジョブリストに表示してから、閉じる前にフォアグラウンドに戻すことができます。
例5:bgを使用してバックグラウンドジョブを実行する
&記号を使用してバックグラウンドにジョブを送信することもできますが、代わりの記号を使用することをお勧めします。スクリーンキャストでは、ctrl+zを使用してジョブを停止するのを見ました。 fg%n を使用して、ジョブをシェルとフォアグラウンドに戻しました。 指図。 bgを使用して同じことを行うことができます 。
切り替えのためだけにGUIアプリケーションを使用します。過去に、端末からGUIを開くと、端末を閉じるとGUIも閉じることに気付いたかもしれません。この記事で、なぜそうなるのかが明らかになったといいのですが。
それでは、Geditを使用しましょう。次のことを行います:
- Geditを開始
- シェルに戻り、Ctrl + z
- bgを使用して実行するためにバックグラウンドに送信します
- ジョブリストをチェックして、実行されていることを確認します
- フォアグラウンドに戻り、Ctrl+cを使用してシステム割り込みを送信して終了します
[email protected]:~$ gedit
^Z
[1]+ Stopped gedit
[email protected]:~$ bg %1
[1]+ gedit &
[email protected]:~$ jobs
[1]+ Stopped gedit
[email protected]:~$ fg %1
gedit
^C
Linuxでの退職ジョブに関するボーナスヒント
私たちの多くは、ctrl+cを使用してシェルでジョブを終了することに慣れています。これを行う別の方法として、新しいジョブ制御の知識を取り入れることができます。
[email protected]:~$ fg %1
gedit
^Z
[1]+ Stopped gedit
[email protected]:~$ kill %1
そうです、killコマンドをジョブIDと一緒に使用して、ジョブを終了することもできます。
結論
Linuxコマンドラインを学ぶことで、お気に入りのオペレーティングシステムの内部動作に近づくことができます。ジョブコントロールを学習することで、一度に複数のジョブを処理できるようになります。
この記事で探求する新しい何かを見つけていただければ幸いです。楽しんだら、下のコメントセクションでお知らせいただくか、リンクを使用してソーシャルメディアで共有してください。