4

私が作成しているpythonスクリプトでは、最初にプロセスのPID(名前に基づいて)を取得し、次にそのPID、その期間を使用してそのプロセスから取得する必要があります。以下では、「00:00:00」になります

root      5686     1  0 Sep23 ?        00:00:00 process-name

これを使用して、プロセスの名前で PID だけを取得しています。

ps -ef |grep `whoami`| grep process-name | cut -c10-15

したがって、これは正常に機能し、PID の配置が変更されるべきではないため、カット パラメーター (-c10-15) が普遍的に機能すると想定しています (見つけたスニペットからこれを取得しました)。

ただし、このような TIME 値だけを取得するために似たようなことをしようとすると、別の方法で返されます

ps -f 5686

戻り値:

root      5686     1  0 Sep23 ?        S      0:00 /path/to/process

したがって、以下のようにカットを試みると、このリターンの間隔が一貫しており、以前とは異なる時間値を示しているかどうかわからないため、適切に機能するとは思いません (元の「00:00」ではありません) :00" スタイルの印刷。

ps -f 5686 | cut -c40-47

これを Python スクリプトで使用して、特定のプロセス タイプの PID を (名前で) 記録し、後で必要に応じてプログラムのインスタンスをシャットダウンできるようにしています。私のアプローチを修正するために私ができることについてのアドバイスは大歓迎です

4

3 に答える 3

3

-o オプションを使用して、出力するデータとその順序を制御します。

例えば

$ ps -o pid,time,comm
  PID     TIME COMMAND
 3029 00:00:01 zsh
22046 00:00:00 ps

また

$ ps -o pid,time,comm --no-headers
 3029 00:00:01 zsh
22046 00:00:00 ps

これにより、解析が容易になります。を使用してpythonで出力を解析することをお勧めします(pid, time, cmd) = result.split(2)

または、pgrep コマンドを使用して、特定の基準に一致するプロセスのみを一覧表示します。

于 2010-09-24T09:44:51.000 に答える
0

使用はどうですか

ps ux | awk '/$PROCESS_NAME/ && !/awk/ {print $2, $10}'

それはあなたにPIDとTIMEを与えるはずです(ここから適応)

編集:
バージョン-ef

ps -ef | awk '/$PROCESS_NAME/ && !/awk/ {print $2, $7}'
于 2010-09-24T09:42:15.270 に答える
0

CPU 時間の一貫した表現が必要な場合は、フィールドとフィールド/proc/<pid>/statを読んで読んでください。utimestime

そのファイルの完全なレイアウトを取得するために読み取りman 5 procますが、簡単なことは、14 番目と 15 番目の値が必要であり、それらは "jiffies" (通常は 1 秒あたり 100) で表されることです。

% ps -e 2398
2398 ?        00:04:29 ypbind

00:04:29 は 269 秒

% awk '{ print ($14 + $15) / 100 }' < /proc/2398/stat
269.26

または、サブプロセスを生成せずに Bash スクリプトで:

#!/bin/sh
read -a procstat /proc/pid/stat
let cpu=(procstat[13] + procstat[14]) / 100
于 2010-09-24T09:47:19.327 に答える