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>
cmd
args
プロセスによる修正を含む、コマンドとすべての引数を表示する非標準のエイリアスです。
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
が、その間に他のプロセスが実行されるのを待つのにほとんどの時間を費やしましたsleep
(sh
短時間の実行後)。