- Published on
Bash psコマンドを実行しているコマンドがpsの出力に入らないようにする
- Authors
- Name
- Shou Arisaka / 有坂翔
Linuxパソコン・サーバーのBash言語のコマンドライン上における"ps"コマンドにおいて、psコマンドを実行しているコマンドそれ自体がpsの出力に入らないようにする、除外する方法についてです。
psコマンドを実行すると、psコマンド自体とそれをパイプしているコマンドまで出力に入ってきてしまいます。
例えば、カレントのシェルでnode.jsがバッググラウンドで動いているかもしれないのでそれを確認したい、という場合。
tty="$( tty | ag -o '\d+' )" ; ps aux | ag "(tty|pts)/${tty}" | awk '!/\s(Ss)\s/'
これは以下のような出力になります。
yuis 17361 0.0 0.0 1175236 26304 pts/8 Sl 00:49 0:01 node tmp.js
yuis 18990 0.0 0.0 873500 26608 pts/8 Sl 01:21 0:00 node tmp.js
yuis 20377 0.0 0.0 874012 26656 pts/8 Sl 01:48 0:00 node tmp.js
yuis 24704 0.0 0.0 16676 1868 pts/8 R 02:44 0:00 ps aux
yuis 24705 0.0 0.0 11416 1080 pts/8 R 02:44 0:00 ag (tty|pts)/8
yuis 24706 0.0 0.0 25676 1824 pts/8 R 02:44 0:00 bash -l -i
この出力のうち、重要な部分は以下のみですね。
yuis 17361 0.0 0.0 1175236 26304 pts/8 Sl 00:49 0:01 node tmp.js
yuis 18990 0.0 0.0 873500 26608 pts/8 Sl 01:21 0:00 node tmp.js
yuis 20377 0.0 0.0 874012 26656 pts/8 Sl 01:48 0:00 node tmp.js
このような出力にしたい場合、以下のようにします。 ps aux
は出力がコマンドの開始時刻順にソートされていますので、sed '/ps aux/,+1 d'
でps aux
を含む行とそれ以降の行を削除してしまえばよいということになります。
tty="$( tty | ag -o '\d+' )" ; ps aux | ag "(tty|pts)/${tty}" | awk '!/\s(Ss)\s/' | sed '/ps aux/,+1 d'