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