ps出力からps自体を除外します。

ps出力からps自体を除外します。

システム内のすべてのプロセスに関する情報を取得したいと思います。psプロセスを除外それ自体。

つまり、次のようになります。

ps --no-headers --pid 1111 -N

どこ1111プロセスIDpsコマンドを実行してください。

私は次のことを試しました

ps --no-headers --ppid $$ -N

しかし、これはいいえps以下の「サブプロセス」で実行されている場合:

IFS=' ' read pctd proc <<<$(/bin/ps --no-headers --ppid $$ -No pcpu,pid,comm --sort=+pcpu | tail -n 1)

最後のコマンドは、CPU使用率、プロセスID、および「最新」の最も多くのCPUを使用したプロセス名を取得しようとします。

IFS=' ' read pctd proc <<<$(/bin/ps --no-headers -eo pcpu,pid,comm --sort=+pcpu | tail -1)

最近までうまくいきました。しかし、Ubuntu 23.04(またはカーネル6.x)にアップデートしてps起動時々CPUを100%使用していることを示します。


現在、次は回避策のようです(ただし安全ではありません)。

IFS=' ' read pctd proc <<<$(/bin/ps --no-headers -eo pcpu,pid,comm --sort=+pcpu | grep -v \ ps | tail -1)

ベストアンサー1

ps私を除く:

sh -c 'exec ps --no-headers --pid "$$" -N'

sh独自のPIDをに変更して$$から自分をに置き換えますps。 PIDは変更されません。これがexecうまくいく方法です。このメソッドはps独自のPIDをオプションパラメータとして受け取ります--pid

この方法は除外されます。これ psps他のプロセス(存在する場合)は適用されません。

おすすめ記事