ジョブ管理

おそらくすべてのnix-oidは、最後にアンパサンドを使用してチームを立ち上げることを知っています。それはバックグラウンドになり、動作し続けます。

したがって、実行中のコマンドはjobに変わります。

より高度なものは、実行中のタスクのリストをjobsコマンドで表示し、fgコマンド(バックグラウンドタスクをシェルに出力)/ bg(停止したタスクをバックグラウンドに送信)で切り替えることができることを知っています。 残りのチームはそれをあまり頻繁に使用せず、Linux Linuxの大部分の初心者は簡単にそれらについて読みましたが、彼らはそれを忘れていたか、まったく知りませんでした。 ちなみに、さらに: jobsfgbgにはdisownがありwait 、さらにkillさえあります。

タスク内で使用できるもの、または上記のコマンドを制御するために使用できるものを除きます:enable、builtin。

だからあなたがそれを行う方法を疑問に思っているなら:

1.ジョブインを一時停止します。 停止(kill)。

2.以前に中断されたジョブを開始します。

3.高度なジョブ番号。

4.バックグラウンドタスクの完了を待機しています。

5.否認チーム。





3つのタスクを実行します。

$ nice gzip < /dev/zero > /dev/null &

[1] 15727

$ bzip2 < /dev/zero > /dev/null &

[2] 15728

$ xz < /dev/zero > /dev/null &

[3] 15730








番号1、2、3の3つのタスクとそれらのPID。



ジョブを停止





一時停止


たとえば、最初のタスクを一時停止します。

killコマンドは、SIGSTOPシグナルを送信してこれを行います。

  kill -SIGSTOP%1 


この場合、bash:killの内部コマンドが使用され、外部プログラム/ bin / killは使用されませんでした。

はい、/ bin / killを使用してSIGSTOPシグナルを送信することもできますが、外部プログラムはジョブ番号を処理できず、PIDを付与します。

Linuxでは、依然として非常に便利です。4〜5桁のPID(2バイト)ですが、AIXではpidは基本的に8桁のPIDであり、9桁にすることができます。さらに、連続ではなく4バイトの範囲に散らばっています



SIGSTOPシグナルは、アプリケーションが無視できない3つのシグナルの1つです(SIGSTOP、SIGCONT、SIGKILL(通常は9))。 はい、もちろん、それぞれに数値コードがあります(たとえば、kill -9はkill -SIGKILLを意味します)が、すべてのプラットフォームで一致するわけではありません。 これらの対応は、ドキュメント(man signal / man 7 signal / man kill)から、またはkill -lコマンドで直接(内部)見つけることができます。



ジョブ完了


同様に:

kill -SIGKILL%1またはプロセスPID。



以前に一時停止した実行中


bg%1-中断されたジョブをバックグラウンドに送信します。

fg%1-停止(または実行中のタスク)に切り替える



別のオプション:このタスクに切り替えて停止Ctrl + Z:

 $ fg%1
 nice gzip </ dev / zero> / dev / null
 ^ Z
 [1] + nice gzipの停止</ dev / zero> / dev / null




高度なジョブ番号付け



私は3つのプロセスでゼロを圧縮し続けています。

 [1] 15727 nice gzipの実行</ dev / zero> / dev / null&
 [2]-15728 bzip2の実行</ dev / zero> / dev / null&
 [3] + 15730 xzの実行</ dev / zero> / dev / null&




角括弧内の最初のフィールドはジョブ番号です。 fg、bg、kill(内部)、disown、waitなどのコマンドでアクセスできます。



2番目のフィールド:has-(マイナス)2番目のタスクと+ (プラス)3番目-これらは、「最後」と「現在」という表記のタスク数です。

現在は、現在取り組んでいるものです。 1つのタスクを実行している場合、そのタスクのみに+が付きます。 fgコマンドで別のタスクに切り替えると、「現在」になります。 ジョブ番号なしのコマンドfgおよびbgは、Currentで機能します。 %+または%%からもアクセスできます。



後者は現在の前のものです。 現在を完了すると(kill -9 %%)、後者が最新になります。 タスクの一種のスタック。 あなたは彼を通して連絡することができます%-



また、fg、bg、kill、disown、waitコマンドについては、実行するコマンドの名前を使用してタスクにアクセスできます。

別の睡眠をとる
 キル-9 #x 


xで始まるタスクを1つだけ強制終了します(xzコマンドを使用したアーカイブには苦労します)



  kill -9#?gzip 


gzipを含むチームを殺します。 (私はそのようなプロセスも1つしかありません)、マスクがいくつかのタスクを含むようなものである場合(たとえば、前のコマンドkill -9#?Zip)、gzipとbzip2の両方がそのようなものに該当するため、これは機能しません奇妙なことですが、fgでは1つの引数が必要であり、killでは複数の引数を取ることができることを理解できますが、bgではできませんが、一般的にはすべてのコマンドであいまいなことがわかりませんマスク)



詳細については、 ABSガイドの表を参照してください。



有効化および組み込み


ここで、有効化コマンドと組み込みコマンドについて説明する必要があります。

上記のリンクから:



組み込みのBUILTIN_COMMANDコンストラクトは内部BUILTIN_COMMANDコマンドを実行し、同じ名前の関数と外部システムコマンドの使用を一時的に禁止します。

enable内部コマンドの呼び出しを禁止または許可します。 たとえば、enable -n killは、内部killコマンドの使用を禁止します。その結果、インタープリターがkillコマンドを検出すると、外部killコマンドを呼び出します。 / bin / kill。




内部コマンドは、子プロセスをフォークする必要がないという理由だけで、それらを切り替える場合に、外部の本格的なプログラムよりも速く呼び出されます。 内部コマンドのリストについては、 enable -aを参照してください。



バックグラウンドタスクが完了するのを待っています



waitコマンド-すべてのバックグラウンドジョブが完了するか、指定されたジョブ番号/プロセスPIDでジョブ/プロセスが完了するまで、スクリプトを一時停止します。 指定されたジョブ/プロセスの完了コードを返します。

多くの場合、プロセスの同期に使用されます。1つ以上のタスクをバックグラウンドで(並行して)実行し、それらが完了するのを待って、次のフェーズを続行します。



 cat url.list |  URLを読み取り中;  do wget -qc "$ url"&done
待って 
 mv ./* /メディア/フラッシュ/


すべてのURLのリストから同時にダウンロードを開始し、 すべてのダウンロードが完了すると、それらをUSBフラッシュドライブに転送します。



チームを否認する



disown-シェルのアクティブなジョブテーブルからジョブを削除します。 つまり プロセスは引き続きバックグラウンドで実行されますが、タスクではなくなりました。

nohupコマンドによって起動されたプロセスに役立ちます。SIGHUPシグナルをインターセプトし、nohup.outファイル内の出力ストリームを自身に取り込みます。



コマンドには、サスペンド、時間とログアウト、時間もあります。

たとえば、times%N-ジョブおよび現在のシェルのユーザースペースおよびシステムでの累積時間を表示します。 別のコマンドでctrl + Zを押すことで実行できるように、サスペンドは現在のシェルを一時停止しますが、現在のシェルがログインシェルモードで機能しない場合に限ります。 しかし、私はそれらがどのように適用されるか想像することさえできません。



All Articles