私のプログラムが使用された期間を知りたいです。たとえば、Webブラウザを使用している場合は、総使用時間を確認するために開始時間と終了時間を知りたいと思います。
基本的に、私はアプリケーションがいつ起動され、いつ終了するかを知りたいと思い、イベントに基づいてファイルに時間を登録するなどのことをしたいと思います。
カーネルイベントや同様のイベントを聞く方法を検索しましたが、何も見つかりませんでした。私も試してみましたsupervisord
が、プロセスがあまりにも早く終了し、何も記録されないと言いました。
pyinotify
私の他の試みは、ライブラリを使用して/proc
フォルダを表示することでしたが、完全に失敗しました。
私はUbuntuで働いています。どのようなヒントがありますか?
これらは私のソースです
答え1
BSDプロセス会計を使用できます。lastcomm
経過時間は報告されませんが、少なくともLinuxではアカウントデータベースに保存され、コマンドを使用して照会できますdump-acct
。
$ sudo accton on # activate process accounting
$ sleep 5.23
$ sudo dump-acct /var/log/account/pacct | grep '^sleep'
sleep |v3| 0.00| 0.00| 523.00| 10031| 10031| 14632.00| 0.00| 15261 416|Mon Jun 2 17:09:37 2014
経過時間はフィールド5(523センチ秒以上)です。
3番目と4番目のフィールドは、ユーザー時間とシステム時間で、プロセス(プロセス内のすべてのスレッド)を実行しているCPU(すべてのCPU)が費やした時間です。
(少なくともLinuxでは)プロセス(そのスレッドの1つ)が終了すると、シャットダウン時のプロセス名が記録されます。これは、例えば、次のことを意味します。
sh -c 'sleep 4; exec sleep 5'
あるプロセスが実行されsh
、別のプロセスが実行されるように分岐され、次にsleep 4
最初のプロセスが実行されますsleep 5
(したがって名前が変更されます)。会計データベースでは、次のようになります。
sleep |v3| 0.00| 0.00| 400.00| 1000| 1000| 10320.00| 0.00| 28867 28866|Tue Jun 3 07:45:52 2014
sleep |v3| 0.00| 0.00| 900.00| 1000| 1000| 10320.00| 0.00| 28866 28801|Tue Jun 3 07:45:52 2014
これは実行されるプロセスであり、sh
持続時間は900センチ秒と計算sleep 5
され、sleep
言及されていませんsh
。
firefox
残念ながら(マルチスレッドアプリケーション)私の場合は、プロセスの短期スレッドの1つが終了したときに計算されたので、私が見た時間は非常に短かったです。