55390


とあるデーモンがどれだけ起動しているか調べる際、`ps -ax | grep 〈デーモン名〉` を使うと `grep` 自身も検索にひっかかってしまいます。

これが地味にややこしいです。自分自身は除外するように検索するにはどうすれば良いでしょうか？

[code]

    $ ps -ax | grep emacs
      154 ?        Ss     0:00 emacs --daemon
     5502 tty1     R      0:00 grep --color=auto emacs    # ← この行を出力したくない
    
[/code]

Info:
[この投稿](https://ja.stackoverflow.com/a/55380/19110)についたコメントから影響を受け、自分の知らないやり方がありそうだと思って投稿した質問です。


CC BY-SA 4.0
2019-05-31T04:11:13.233
55386
2019-05-31T08:27:40.103
19110
question
shellscript grep
ps -ax | grep だと自分自身も出力されてしまう


ひとつの trick として、コマンド名の先頭1文字だけを角括弧で囲うというテクニックがあります。

[code]

    $ ps -ax | grep [e]macs
      154 ?        Ss     0:00 emacs --daemon
    
[/code]

詳しくは: <https://ja.stackoverflow.com/a/55380/19110>


CC BY-SA 4.0
2019-05-31T04:11:13.233
55387
2019-05-31T04:11:13.233
19110
55386
answer


別の方法１  
昔からある商用 UNIX には入っていませんが [linux](/questions/tagged/linux "'linux'
のタグが付いた質問を表示") ならたいてい `pgrep` というツールが入っています。

[code]

    $ pgrep emacs
    
[/code]

<https://linuxjm.osdn.jp/html/procps/man1/pgrep.1.html>  
`pgrep` の検索は、動作中の自分自身にはマッチしない仕様なので楽です。

別の方法２  
`grep` が `grep` にヒットするから気に入らないのであればもう一段階 `grep` を使って除外することができます。やや冗長ですね。

[code]

    $ ps -aux | grep emacs | grep -v grep
    
[/code]

<https://linuxjm.osdn.jp/html/GNU_grep/man1/grep.1.html>  
`grep` のオプション `-v` はマッチしない場合を抽出です。

# オイラはこれで `grep -v` を覚えました。


CC BY-SA 4.0
2019-05-31T04:26:07.157
55390
2019-05-31T04:26:07.157
8589
55386
answer


以下のように`pgrep`を使う方法もあります。

[code]

    pgrep -f emacs | xargs --no-run-if-empty ps -f
    
[/code]

関数化しておくと便利かもしれません。

[code]

    psgrep() { pgrep -f "$1" | xargs --no-run-if-empty ps -f; }
    
[/code]


CC BY-SA 4.0
2019-05-31T08:27:40.103
55401
2019-05-31T08:27:40.103
25936
55386
answer