task_struct

# mcrash

## task_struct

### 書式

usage: `task_struct` [-f] [address]

### 説明

`task_struct`は1つのプロセスに必ず1つ対応しているテーブルです。 それぞれのプロセスに特有な情報を保持しています。

引数として`task_struct`のアドレスを指定すると、 そのプロセスの情報を表示します。 引数無しで`task_struct`を実行すると、 実行中のすべてのプロセスの一覧を表示します。 (`init_task_union`からtask_structのチェーンを辿ります)

タスクの状態(S)は以下の記号で表しています。

R | TASK_RUNNING | 実行可能状態
I | TASK_INTERRUPTABLE | 休眠状態
U | TASK_UNINTERRUPTABLE | 休眠状態 (シグナルで起きない)
Z | TASK_ZOMBIE | ゾンビ状態
T | TASK_STOPPED | サスペンド状態

Uとして表示されるプロセスは要注意です。 もしUの状態がずっと続くようでしたらプロセスのtrace を取ってみましょう。

Linux2.4までは`task_struct`の直後にカーネルスタック があり、二つあわせて2ページ8KBになっています。

カーネルスタック
  カーネル内で動作するためのスタック。 システムコールによるものと、割り込みによるものを含む

このため、カーネルスタックが伸びすぎると`task_struct`の後ろを壊します。 なお、`task_struct`のサイズはLinux 2.4.18だと1440バイトくらい。

Linux 2.5 以降では task_struct と カーネルスタックは分離されました。

MMエントリは`mm_struct` コマンドで表示できます。 詳細表示(-f)で出力されるオープンファイルは `file`コマンドで表示できます。 詳しくは`files_struct` の説明をを参照してください。 カーネルスタックトレースは、 traceコマンドで表示できます。

### オプション

-f
  詳細を表示します。 files_struct も合わせて表示します。

### エイリアス

標準で `p` としてエイリアスしています。

### 実行例

`task_struct`を引数無しで実行すると、プロセス情報を一覧を表示します。

    > task_struct ! head
        ADDR S   PID   SID   UID  EUID       MM NAME             FLAGS
    c02ce000 R     0     0     0     0        0 swapper
    cfee4000 I     1     0     0     0 c1389080 init             superpriv
    c12ca000 I     2     1     0     0        0 keventd          forknoexec
    c12fe000 I     3     1     0     0        0 kapmd            forknoexec
    c12fc000 I     4     1     0     0        0 ksoftirqd_CPU0   forknoexec
    c12fa000 I     5     1     0     0        0 kswapd           forknoexec memalloc
    c12f8000 I     6     1     0     0        0 bdflush          forknoexec
    c12f6000 I     7     1     0     0        0 kupdated         forknoexec
    c13ee000 I     9     1     0     0        0 khubd            forknoexec
    cf8bc000 I   461   461     0     0 c13891c0 syslogd          forknoexec

-fオプションを付けると詳細を表示します。

    > task_struct -f c9d90000
        ADDR S   PID   SID   UID  EUID       MM NAME             FLAGS
    c9d90000 R 29463 29427   524   524 c412b884 mcrash           superpriv
          FILES CNT   FDS FDSET  NEXT       FD CLOSEXEC  OPENFDS
       c7fe4044   1   256  1024     4 c6803400 c7fe4064 c7fe40e4
        0:cb85ef54    1:cb85ef54    2:cb85ef54    3*c12cb1f4
            lock_depth: -1
            nice:       0
            sleep_time:  59ddb9b  (jiffies)
            mm:         c412b884  (mm_struct)
            binfmt:     c04686b8  (binfmt)
            pptr:       c6ae6000  (task_struct)
            times:      b b - 0 0
            start_time:  59dd8c0  (jiffies)
            user:       cb1fe3a4
            tty:        ca792000
            fs:         cbfef628  (fs_struct)
            namespace:  c12171f4
            sig:        cba435a0
            blocked:    00000000 00000000
            thread:     c9d90370
            eip:c0113c5c  esp:c9d91ec8  esp0:c9d92000

mcrash, Copyright (C) 2002,2003 ASANO Masahiro