シェルでコマンドを実行しましたが、
cat >my1.fifo &
PIDを見つけようとすると下に表示されません。
ps -ef | grep my1.fifo
答え1
リダイレクトは実行前にシェルによって実行されますcat
。このような:
(
exec >my1.fifo
exec cat
) &
ご覧のとおり、コマンドcat
ライン引数なしで実行されますが、標準出力は開かれたファイルにリンクされています。何を書いているのかほとんどわかりません(もちろんファイル名もわかりません)。
答え2
cat
次のように実行するとpidが見つかりません。
cat >my1.fifo &
理由は簡単です。cat
標準入力が閉じたら、標準入力の読み取りを完了する必要があります。コマンドをバックグラウンドにプッシュすると(&
最後に)起動プロセスの標準入力が閉じます。
つまり、コマンドはcat >my1.fifo &
バックグラウンドに移動してすぐに完了します。したがって、ps
フォローアップはありません。見つかりません。
プロセスのpidが何であるかを知りたい場合は、次のようにします。これにより、echo $!
バックグラウンドで送信された最後のプロセスのpidが印刷されます。もちろん、プロセスリストにはこのpidが見つかりません(完了しました)。
ただし、たとえば他のものを使用している場合は、プロセスリストでそのエントリを見つけてそのpidを表示tail -f somefile >my1.fifo &
できます。tail
echo $!