プロセスが存在しない場合は出力を生成しない

プロセスが存在しない場合は出力を生成しない

次のコマンドがtail実行されていないときに出力が生成されない場合はうれしいです。

ps --no-headers $(pidof tail)

代わりに、私は次のようになります。

  964 pts/2    00:00:01 bash
 4393 pts/2    00:00:00 ps

答え1

psあなたのバージョンがこのオプションをサポートしている場合-C

ps --no-headers -C tail

psそれ以外の場合は、成功した場合にのみ実行できますpidof

pid=$(pidof tail) && ps --no-headers ${pid}

または(Zshの場合):

pid=$(pidof tail) && ps --no-headers $=pid

(ありがとうございます。ザイルズ! )。

答え2

pidofpgrepシステムで実行されている項目を確認するのに便利なコマンドですが、一部のオペレーティングシステムでは両方のコマンドを使用できません。これは、ほとんどのUnix、BSD、およびLinuxバージョンで動作します。

ps aux | grep tail | grep -v grep

これにより、grepコマンド自体が削除されます。

答え3

を使用すると、pgrepPIDとコマンドを一覧表示でき、空の入力ではプロセスが一致しません。

pgrep -a tail

表示されるフィールドをさらに制御するには、pidofプロセスリストが空でない場合にのみ、またはを呼び出しますpgrepps一時変数を使用できます。

pids=$(pgrep -d, tail)
[ -z "$pids" ] || ps --no-headers -p "$pids"

またはifneその他のユーティリティ:

pgrep tail | ifne xargs ps --no-headers

関連情報