process grepコマンドはps -ef |下には表示されません。

process grepコマンドはps -ef |下には表示されません。

シェルでコマンドを実行しましたが、 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 &できます。tailecho $!

関連情報