監視アプリケーションでプロセスを開始してこれを回避したいと思います。
ベストアンサー1
ps
fromを使用するLinux procps(-ng)
(およびPOSIXで指定されている他のほとんどのシステム):
ps -o etime= -p "$$"
$$
確認したいプロセスのPIDはどこにありますか?これにより経過時間が形式で返されます[[dd-]hh:]mm:ss
。
経過時間だけ-o etime
を知らせるフィールドとその末尾に抑制ヘッダーを使用します(そうでない場合は1行が表示され、次の行には時間が表示されます。を使用すると1行だけが表示されます。時間)。ps
=
ELAPSED
または、LinuxまたはFreeBSD 9.0以降(およびその他のバージョン)の最新バージョンのprocps-ngツールバー(3.3.0以降)の場合は、次のものを使用してください。
ps -o etimes= -p "$$"
(追加s
)時間を秒単位でフォーマットし、スクリプトでより便利に使用します。
Linuxでは、ps
プログラムはこの情報をから取得します/proc/$$/stat
。ここで、フィールドの1つ(参照man proc
)はプロセスの開始時間です。残念ながら、これはシステム起動後のjuffies時間として指定されます(Linuxカーネルで使用される任意の時間カウンタ)。したがって、システムが起動された時間/proc/stat
、システムの1秒あたりのjifiesの数を確認してから、有用な形式で経過時間を得るために数学を実行する必要があります。
HZ(つまり、1秒あたりのジフィー)の値を見つけることは非常に複雑です。 procpsパッケージのコメントによれば、sysinfo.c
A)カーネルヘッダーを含み、他のカーネルを使用するときに再コンパイルするか、B)sysconf()
残念ながら、Cライブラリにコンパイルされたハードコードされた値を使用するposix関数を使用するか、C)カーネルに尋ねることができますあります。しかし、これを行うことができる公式のインターフェースはありません。したがって、コードはps
正しい値を決定するために使用される一連のパッチワークで構成されます。うわー。
ps
これで非常に便利にすべての作業が完了しました。 :)
(ノート:stat -c%X /proc/$$
動作しません。バラより関連質問に対するStéphane Chazelasの回答.)