ps:短いコマンド名と実行時間を取得する

ps:短いコマンド名と実行時間を取得する

Debian 8システムでは、特定のユーザーのプロセスとその実行時を確認しようとしています。

$ ps -u <user>
  PID TTY          TIME CMD
26038 ?        00:00:00 php5-fpm
26052 ?        00:00:00 php5-fpm
26950 ?        00:00:00 php5-fpm
27344 ?        00:00:00 php5-fpm
28292 ?        00:00:00 php5-fpm
28691 ?        01:54:21 python3 /usr/lo
$ which ps  # ps is not aliased or so.
/bin/ps

今私また各プロセスにかかる時間が必要です。だから私は次のことを試みます:

$ ps -o cmd=,etime= -u <user>
php-fpm: pool <user>         00:36
php-fpm: pool <user>         00:36
php-fpm: pool <user>         00:24
php-fpm: pool <user>         00:18
php-fpm: pool <user>         00:04
python3 /usr/local/bin/fixw    17:39:44

php-fpmただし、2番目の出力では長い名前ではなく、1番目の出力では短いプロセス名が必要です。これを行う方法はありません。psマニュアルページを読んでください。
出力#1のCMDと出力#2の経過時間をどのように取得しますか?

解決策 @StephenKittの答えはヒントがありません。ただし、少し変更する必要があります。奇妙な出力:

$ ps -o comm=,etime= -u <user>
,etime=
php5-fpm
php5-fpm
php5-fpm
php5-fpm
php5-fpm
ps
python3 /usr/lo

個々のオプション操作:

$ ps -o comm= -o etime= -u <user>
php5-fpm              00:55
php5-fpm              00:27
php5-fpm              00:24
php5-fpm              00:13
php5-fpm              00:08
python3 /usr/lo    17:49:38

答え1

列名にもかかわらず、探している出力はcomm次のとおりですcmd

ps -o comm= -o etime= -u <user>

cmdargsプロセスによる修正を含む、コマンドとすべての引数を表示する非標準のエイリアスです。

comm~であるプロセス名Linuxでは、これはプロセスによって実行された最後のファイルのデフォルト名(またはファイルが実行されていない場合は親プロセスと同じ名前、またはカーネルジョブのジョブ名)の最初の15バイトがデフォルトであり、次のようになります。に修正されましたPR_SET_NAME prctl()

これはetimeプロセスが作成されてからの時間で、プロセスは寿命の間に複数のコマンドを実行でき、しばしば実行します。したがって、この内容が表示されても必ずしも3秒間実行されたというcmd 00:03意味ではありません。cmd現在実行中のプロセスは、cmd以前に別のコマンドを実行した可能性があります。

$ sh -c 'sleep 3; exec ps -o comm= -o etime='
zsh                   13:48
ps                    00:03

実行中のプロセスはps以前に実行されていましたshが、その間に他のプロセスが実行されるのを待つのにほとんどの時間を費やしましたsleepsh短時間の実行後)。

関連情報