最近、どんどん技術系の記事の割合が下がっているような気がして危惧している管理人です。
どのぐらい下がっているかというと、もはやウチのサイトではAmazonのご推薦に技術系の本とかカケラも出てきません。ゲームまみれの宣伝をされてます。
そんなわけで、しばらく意識的に技術系の割合を上げて行きたいと思います。
-----
linuxで通常ユーザ時間、システム時間を取得するにはtimes(2)をつかうが、これはプロセス内の全スレッドの値を合計したものが帰ってくる。
通常はこれで問題ないのだが、特殊な情况では自身のスレッドの分だけのユーザー時間がほしくなったりもするものだ。
そういうときには/procインターフェースをつかう
/proc/[pid]/task/[thread_id]/stat を開くと
のような人間に読むことを拒否するかのような数字の羅列が出て来るが、この中でみるべきは
である。
utimeとかstimeの意味は
で調べてほしい。

ペンギン! ランキング!
それ以外の数値の意味も解説しようかと思ったのだが、面倒くさいので、ソースの位置をしめす。これをみれば日本語で説明されるのがアホらしくなるぐらい一発でわかる
僕とカーネルのバージョンが合わない人は行番号があわないと思うのでlxr とかでソースと突き合わせてほしい
kernel2.6.11だと
kernel/fs/proc/array.c#400行目
こんなんです。
どのぐらい下がっているかというと、もはやウチのサイトではAmazonのご推薦に技術系の本とかカケラも出てきません。ゲームまみれの宣伝をされてます。
そんなわけで、しばらく意識的に技術系の割合を上げて行きたいと思います。
-----
linuxで通常ユーザ時間、システム時間を取得するにはtimes(2)をつかうが、これはプロセス内の全スレッドの値を合計したものが帰ってくる。
通常はこれで問題ないのだが、特殊な情况では自身のスレッドの分だけのユーザー時間がほしくなったりもするものだ。
そういうときには/procインターフェースをつかう
/proc/[pid]/task/[thread_id]/stat を開くと
8442 (emacs) R 1 8442 3175 0 -1 4194304 4877 209853 16 130 1566 3929 6239 30180 15 0 1 9 693045 23412736 4130 4294967295 134512640 135864868 3220640240 3220552484 12244898 0 0 536870912 1367441149 0 0 0 17 0 0 0
のような人間に読むことを拒否するかのような数字の羅列が出て来るが、この中でみるべきは
14番目: utime
15 : stime
16 : cutime
17 : cstime
である。
utimeとかstimeの意味は
man 2 times
で調べてほしい。

ペンギン! ランキング!
それ以外の数値の意味も解説しようかと思ったのだが、面倒くさいので、ソースの位置をしめす。これをみれば日本語で説明されるのがアホらしくなるぐらい一発でわかる
僕とカーネルのバージョンが合わない人は行番号があわないと思うのでlxr とかでソースと突き合わせてほしい
kernel2.6.11だと
kernel/fs/proc/array.c#400行目
res = sprintf(buffer,"%d (%s) %c %d %d %d %d %d %lu %lu \
%lu %lu %lu %lu %lu %ld %ld %ld %ld %d %ld %llu %lu %ld %lu %lu %lu %lu %lu \
%lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %lu\n",
task->pid,
tcomm,
state,
ppid,
pgid,
sid,
tty_nr,
tty_pgrp,
task->flags,
min_flt,
cmin_flt,
maj_flt,
cmaj_flt,
cputime_to_clock_t(utime),
cputime_to_clock_t(stime),
cputime_to_clock_t(cutime),
cputime_to_clock_t(cstime),
priority,
nice,
num_threads,
(long) ktime_to_clock_t(it_real_value),
start_time,
vsize,
mm ? get_mm_rss(mm) : 0,
rsslim,
mm ? mm->start_code : 0,
mm ? mm->end_code : 0,
mm ? mm->start_stack : 0,
esp,
eip,
/* The signal information here is obsolete.
* It must be decimal for Linux 2.0 compatibility.
* Use /proc/#/status for real-time signals.
*/
task->pending.signal.sig[0] & 0x7fffffffUL,
task->blocked.sig[0] & 0x7fffffffUL,
sigign .sig[0] & 0x7fffffffUL,
sigcatch .sig[0] & 0x7fffffffUL,
wchan,
0UL,
0UL,
task->exit_signal,
task_cpu(task),
task->rt_priority,
task->policy);
こんなんです。
- 関連記事
-
- linuxでcogitoをつかう (2006/02/11)
- スレッド毎のユーザ時間/システム時間を調べたい (2006/02/11)
- CentOS on VMWare Player をインストールする (2006/02/06)