テキスト処理のためにシステムで実行されているプロセス全体のリスト(少なくともそのコマンド名とPID)をテーブル形式で取得するにはどうすればよいですか?

テキスト処理のためにシステムで実行されているプロセス全体のリスト(少なくともそのコマンド名とPID)をテーブル形式で取得するにはどうすればよいですか?

実行するとtopこんな画面が出ますが、

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    654 root      20   0   25.5g 147780  70084 S   3.7   0.9  72:08.69 Xorg
   1687 me        20   0 9165008   1.4g 268488 S   1.3   8.9 163:06.01 qutebrowser
    316 root     -51   0       0      0      0 S   0.7   0.0   1:09.86 irq/51-DELL095A:00
    683 me        20   0  810360  58212  41792 S   0.7   0.4  12:35.61 picom
    702 me        20   0  246876  18032  14616 S   0.7   0.1  26:04.86 i3bar
    827 me        20   0  665528  16316   9980 S   0.7   0.1  32:41.79 conky
2874827 me        20   0 6008688 209960 123060 S   0.7   1.3   0:10.84 QtWebEngineProc
    675 me        20   0  175796  24656  15216 S   0.3   0.2   0:14.27 i3
    771 me         9 -11 1022184  21952  12056 S   0.3   0.1  82:23.43 pulseaudio

しかし、プログラムはインタラクティブなので、時間が経つにつれて画面が変わることがわかります(時間の経過とともに情報が変わるので大丈夫です)。しかも、top | grep whatever決して戻れないようです。

その状態のスナップショットをテキスト処理ユーティリティに送信するにはどうすればよいですか?

コメントではselectを提案しますtop -b -n 1が、それを別のプログラムにパイプすると(または単純化のために> some-file)一種のヘッダもあることがわかります。

top - 21:35:47 up 5 days,  7:24,  1 user,  load average: 0.16, 0.41, 0.37
Tasks: 243 total,   1 running, 241 sleeping,   1 stopped,   0 zombie
%Cpu(s):  2.3 us,  3.1 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.8 si,  0.0 st
MiB Mem :  15787.2 total,   1840.9 free,   5693.1 used,   8253.3 buff/cache
MiB Swap:  16384.0 total,  16375.2 free,      8.8 used.   6256.7 avail Mem 

実行中のすべてのプロセスのきちんとした表形式のレポートがあれば、それはすべてです。

以外のユーティリティを使用する必要がありますかtop

たぶんps -e私が追求する必要がありますか?


このソリューションを使用するシナリオは、デバッガのPIDセレクタを使用することです。ユーザーはプロセス名を作成し、PIDセレクターはその名前に基づいて実行されているプロセスのリストをフィルタリングしてから、ユーザーが希望するプロセスを選択します。対応するPIDは、デバッガを接続するために使用されます。

答え1

ps -o書式設定されたフィールド名の出力に大きな成功を収めました。 Linuxのマニュアルページでは、最初に出力指定子に何度も言及しましたps(1)

まず、この部分を簡単に紹介すると、次のようになりますEXAMPLES

カスタム形式を使用して各プロセスを表示するには、次の手順を実行します。
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat, euid, ruid, tty, tpgid, sess, pgrp, ppid, pid, pcpu, comm ps -Ao pid,tt,user,fname,tmout,f,wchan

マニュアルページのこのセクションには、OUTPUT FORMAT CONTROLこのオプションの詳細が含まれています。

-o
カスタム形式を指定します。形式は、個々の出力列を指定する方法を提供する空白またはカンマ区切りリストの形式の単一パラメータです。確認されたキーワードは次のとおりです。標準書式指定子以下のセクション。タイトルの名前を変更できます(ps -o pid,ruser=実際のユーザー -o comm=コマンド) 予想通りでした。すべての列ヘッダーが空の場合(ps -o pid= -o通信=) するとヘッダ行は出力されません。

例:

最近では、監視目的でプロセスの常駐セットサイズ(RAM使用量)を取得する簡単な方法でこれを使用しました。

ps -eo pid=,rss=,comm=

出力例:

3874689  9104 sshd
3875080  8788 sshd

交換品は次comm=のとおりですargs=

3874689  9104 sshd: userone [priv]
3875080  8788 sshd: usertwo [priv]

つまり、argsより一貫性のある引数を使用してコマンド名を生成しますps

STANDARD FORMAT SPECIFIERS説明に引用されているセクションを含む、これらのオプションのマニュアルページをよく読むことをお勧めします-o。明確にするために、上記の説明全体を再現しなかった。また、これを試して、区切り文字を含む出力形式を理解していることを確認するのも良い考えです。

その他の用途:

私は、、だけでなく、ps -o指定子を一緒に使用しました。プロセスの機能をリストしたいのですが、スクリプト/コードから解析するためのより簡単な出力が必要な場合に便利です。%cpu%memetimeetimesbsdstartlstartps

答え2

最後にps -e

関連情報