新出@奈良女子大学でございます。

  DebianのWoodyを使っているのですが、procpsのwコマンドがしばしば変な
IDLE timeを表示します。例えばこんな感じです:

$ w
 21:54:29 up 4 days,  3:01, 12 users,  load average: 0.73, 0.33, 0.11
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
nide     ttyp0    :0.0             Fri11    0.00s  0.32s  0.00s  -bash 
nide     ttyp1    :0.0             21:53   1284days  0.14s  0.14s  -bash 

  立ち上げ後4日なのに、IDLEが1284日という…。
  i686, sparc, ppcの3機種で使っていますが(カーネルはそれぞれで提供されて
いる2.4系の最新、procpsも最新)、いずれでもこうなります。

  wのソースを見ると、IDLE timeはttyファイルのatimeと現在時刻の差から算出
しているようです。(w.cの関数idletime()から抜粋)

    return time(NULL) - sbuf.st_atime;

ところがktermを起動してから全くキーインを行わないうちは、(なぜか)ttyの
atimeが変わらないので、atimeがすごく古い値を示してしまい、IDLE timeの算
出がおかしくなる、ということのようです。

$ ls -lau /dev/ttyp[01]
crw-rw-rw-    1 root     tty        3,   4  9月 13 21:54 /dev/ttyp0
crw-rw-rw-    1 root     tty        3,  12  3月  9  2001 /dev/ttyp1

  他のシステムでもこんなものなんでしょうか?

  とりあえずは、上記の箇所を

    return time(NULL) - (sbuf.st_atime > sbuf.st_mtime ?
        sbuf.st_atime : sbuf.st_mtime);

に直せば大丈夫なような気が(何となく)するのですが、これでもまずい場合って
あるでしょうか? 手元では今のところうまくいっているようです。(あるいは、
atimeとutmpから得たlogin timeの新しい方をtime(NULL)から引くのでもいいか
も知れない)
                                                nide@ics.nara-wu.ac.jp