回答:
$!
シェルがそのtail
コマンドを実行したプロセスのPIDを提供することが保証されています。シェルはシングルスレッドであり、各シェルは独自の変数セットを持つ独自のプロセス内に存在します。方法はありません$!
1つのシェルのをしようとしている漏れるだけで(私たちはさておき設定されている場合、別のシェルで同じ名前の変数に影響を与えるつもりはないされて1つのシェルでシェル変数を割り当てるように、別のシェルに普遍変数のfish
シェル) 。
現在、tail -f /dev/null
は無期限に実行されるコマンドですが、有効期間が短いコマンドの場合、可能なプロセスIDの数が限られているため、プロセスIDは必然的に再利用されることに注意してください。
に:
true &
pid=$!
これ$pid
には、シェルが実行されたプロセスのIDが含まれますが、それtrue
を使用するまでに$pid
、そのPIDは無効になり、別のプロセスを参照している可能性があります。
$jobstate/$jobtext
そこでプロセスのステータスを検査するために使用できます。トラップが実行されたときに子がすでに刈り取られているため、人種がないわけではありませんが、これは、pidがすでに再利用される可能性が非常に低い非常に短い人種ウィンドウです。