プロセスが不足している場合、そのプロセスの自己監視はそれほど生産的ではありません。ただし、そのプロセスにしばらく実行されていないことを通知したい場合は、times
定期的に呼び出して、経過時間の相対的な差をスケジュールされたユーザー時間の相対的な差と比較できます(必要に応じてフィールドtms_utime
とtms_cutime
フィールドを合計します)子供を待つことを生産的な時間として数えるために、そしてあなたがあなたに代わって費やされたカーネル時間を生産的な時間として数えるならば、あなたはtms_stime
とフィールドに合計するでしょう)。tms_cstime
スレッド時間については、私が知っている唯一の方法は/proc
ファイルシステムを調べることです。
優先度の高い外部プロセスまたは優先度の高いスレッドは、プロセス(およびスレッド)の適切な/proc/<pid>/stat
エントリを読み取ることにより、対象のプロセス(およびスレッド)を外部から監視できます/proc/<pid>/task/<tid>/stat
。ユーザー時間は、ファイルの14番目と16番目のフィールドにありstat
ます。システム時間は、15番目と17番目のフィールドにあります。(フィールドの位置は、私のLinux 2.6カーネルでは正確です。)
2つの時点の間で、経過した経過時間を決定します(通常、モニタープロセスまたはスレッドは定期的にウェイクアップします)。次に、これらの各時点での累積処理時間の差は、対象のスレッドがその時間中に実行された時間を表します。経過時間に対する処理時間の比率は、タイムスライスを表します。
最後にもう1つ、Linuxでは、次を使用して、ディレクトリ内tid
の権利を調べるための現在のスレッドを取得します。task
/proc/<pid>/task/
tid = syscall(__NR_gettid);
gettid
これを行うのは、文書化されていても、システム上のどのライブラリからも実際にエクスポートされたシステムコールが見つからなかったためです。しかし、それはあなたのもので利用できるかもしれません。