"select" --- I/O 処理の完了を待機する
*************************************

======================================================================

このモジュールでは、ほとんどのオペレーティングシステムで利用可能な
"select()" および "poll()" 関数、Solaris やその派生で利用可能な
"devpoll()" 、Linux 2.5+ で利用可能な "epoll()" 、多くのBSDで利用可能
な "kqueue()" 関数に対するアクセスを提供しています。 Windows 上ではソ
ケットに対してしか動作しないので注意してください; その他のオペレーティ
ングシステムでは、他のファイル形式でも (特に Unixではパイプにも) 動作
します。通常のファイルに対して適用し、最後にファイルを読み出した時から
内容が増えているかを決定するために使うことはできません。

注釈:

  "selectors" モジュールにより、"select" モジュールプリミティブに基づ
  く高水準かつ効率的な I/O の多重化が行うことが出来ます。 OS レベルプ
  リミティブを使用した正確な制御を求めない限り、このモジュールの使用が
  推奨されます。

このモジュールは以下を定義します:

exception select.error

   "OSError" の非推奨のエイリアスです。

   バージョン 3.3 で変更: **PEP 3151** に基づき、このクラスは
   "OSError" のエイリアスになりました。

select.devpoll()

   (Solaris およびその派生でのみサポートされています) "/dev/poll" ポー
   リングオブジェクトを返します。 ポーリングオブジェクトが提供している
   メソッドについては ポーリングオブジェクト 節を参照してください。

   "devpoll()" オブジェクトはインスタンス化時に許されるファイル記述子
   の数にリンクされます。 プログラムがこの値を減らす場合 "devpoll()"
   は失敗します。 プログラムがこの値を増やす場合 "devpoll()" は有効な
   ファイル記述子の不完全なリストを返すことがあります。

   新しいファイル記述子は 継承不可 です。

   バージョン 3.3 で追加.

   バージョン 3.4 で変更: 新しいファイル記述子が継承不可になりました。

select.epoll(sizehint=-1, flags=0)

   (Linux 2.5.44 以降でのみサポート) エッジポーリング (edge polling)
   オブジェクトを返します。 このオブジェクトは、 I/O イベントのエッジ
   トリガもしくはレベルトリガインタフェースとして使えます。

   *sizehint* informs epoll about the expected number of events to be
   registered.  It must be positive, or *-1* to use the default. It is
   only used on older systems where "epoll_create1()" is not
   available; otherwise it has no effect (though its value is still
   checked).

   *flags* is deprecated and completely ignored.  However, when
   supplied, its value must be "0" or "select.EPOLL_CLOEXEC",
   otherwise "OSError" is raised.

   エッジポーリングオブジェクトが提供しているメソッドについては エッジ
   およびレベルトリガポーリング (epoll) オブジェクト 節を参照してくだ
   さい。

   "epoll" オブジェクトはコンテキストマネジメントプロトコルをサポート
   しています。 "with" 文内で使用された場合、新たなファイル記述子はブ
   ロックの最後で自動的に閉じられます。

   新しいファイル記述子は 継承不可 です。

   バージョン 3.3 で変更: *flags* 引数が追加されました。

   バージョン 3.4 で変更: "with" 文のサポートが追加されました。新しい
   ファイル記述子が継承不可になりました。

   バージョン 3.4 で非推奨: *flags* パラメータ。 現在ではデフォルトで
   "select.EPOLL_CLOEXEC" が使われます。 ファイルディスクリプタを継承
   可能にするには "os.set_inheritable()" を使ってください。

select.poll()

   (全てのオペレーティングシステムでサポートされているわけではありませ
   ん) ポーリングオブジェクトを返します。このオブジェクトはファイル記
   述子を登録したり登録解除したりすることができ、ファイル記述子に対す
   る I/O イベント発生をポーリングすることができます; ポーリングオブジ
   ェクトが提供しているメソッドについては ポーリングオブジェクト 節を
   参照してください。

select.kqueue()

   (BSD でのみサポート) カーネルキュー(kernel queue)オブジェクトを返し
   ます。カーネルキューオブジェクトが提供しているメソッドについては、
   kqueue オブジェクト 節を参照してください。

   新しいファイル記述子は 継承不可 です。

   バージョン 3.4 で変更: 新しいファイル記述子が継承不可になりました。

select.kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)

   (BSD でのみサポート) カーネルイベント(kernel event)オブジェクトを返
   します。カーネルイベントオブジェクトが提供しているメソッドについて
   は、 kevent オブジェクト 節を参照してください。

select.select(rlist, wlist, xlist[, timeout])

   Unix の "select()" システムコールに対する直接的なインタフェースです
   。最初の 3 つの引数は '待機可能オブジェクト' からなるイテラブルです
   : 待機可能オブジェクトとは、ファイル記述子を表す整数値か、そのよう
   な整数を返す引数なしメソッド "fileno()" を持つオブジェクトです。

   * *rlist*: 読み込み可能になるまで待機

   * *wlist*: 書き込み可能になるまで待機

   * *xlist*: "例外状態 (exceptional condition)" になるまで待機 ("例外
     状態" については、システムのマニュアルページを参照してください)

   引数に空のイテラブルを指定してもかまいませんが、3 つの引数全てを空
   のイテラブルにしてもよいかどうかはプラットフォームに依存します
   (Unix では動作し、Windows では動作しないことが知られています)。オプ
   ションの *timeout* 引数にはタイムアウトまでの秒数を浮動小数点数で指
   定します。*timeout* 引数が省略された場合、関数は少なくとも一つのフ
   ァイル記述子が何らかの準備完了状態になるまでブロックします。
   *timeout* に 0 を指定した場合は、ポーリングを行いブロックしないこと
   を示します。

   戻り値は準備完了状態のオブジェクトからなる 3 つのリストです: したが
   ってこのリストはそれぞれ関数の最初の 3 つの引数のサブセットになりま
   す。ファイル記述子のいずれも準備完了にならないままタイムアウトした
   場合、3 つの空のリストが返されます。

   イテラブルの中に含めることのできるオブジェクトは Python *ファイルオ
   ブジェクト* (例えば "sys.stdin" や、 "open()" または "os.popen()"
   が返すオブジェクト)、 "socket.socket()" が返すソケットオブジェクト
   です。 *ラッパー <wrapper>* クラスを自分で定義することもできます。
   この場合、適切な (まったくデタラメな数ではなく本物のファイル記述子
   を返す) "fileno()" メソッドを持つ必要があります。

   注釈:

     "select()" は Windows のファイルオブジェクトを受理しませんが、ソ
     ケットは受理します。 Windows では、背後の "select()" 関数は
     WinSock ライブラリで提供されており、 WinSock によって生成されたも
     のではないファイル記述子を扱うことができないのです。

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。

select.PIPE_BUF

   "select()", "poll()" またはこのモジュールの別のインタフェースによっ
   てパイプが書き込む準備ができていると報告された時に、ブロックせずに
   パイプに書き込むことのできる最小のバイト数。これはソケットなどの他
   の種類の file-like オブジェクトには適用されません。

   この値は POSIX により少なくとも512であることが保証されています。

   利用可能な環境: Unix

   バージョン 3.2 で追加.


"/dev/poll" ポーリングオブジェクト
==================================

Solaris とその派生は、"/dev/poll" を持っています。 "select()" が O(最
大のファイル記述子) 、 "poll()" が O(ファイル記述子の数) である一方、
"/dev/poll" は O(アクティブなファイル記述子) です。

"/dev/poll" の挙動は標準的な "poll()" オブジェクトに非常に近いです。

devpoll.close()

   ポーリングオブジェクトのファイル記述子を閉じます。

   バージョン 3.4 で追加.

devpoll.closed

   ポーリングオブジェクトが閉じている場合 "True" です。

   バージョン 3.4 で追加.

devpoll.fileno()

   ポーリングオブジェクトのファイル記述子番号を返します。

   バージョン 3.4 で追加.

devpoll.register(fd[, eventmask])

   ファイル記述子をポーリングオブジェクトに登録します。これ以降の
   "poll()" メソッド呼び出しでは、そのファイル記述子に処理待ち中の I/O
   イベントがあるかどうかを監視します。 *fd* は整数か、整数値を返す
   "fileno()" メソッドを持つオブジェクトを取ります。ファイルオブジェク
   トも "fileno()" を実装しているので、引数として使うことができます。

   *eventmask* はオプションのビットマスクで、どの種類の I/O イベントを
   監視したいかを記述します。 "poll()" オブジェクトと同じ定数が使われ
   ます。デフォルト値は定数 "POLLIN" 、 "POLLPRI" 、および "POLLOUT"
   の組み合わせです。

   警告:

     登録済みのファイル記述子を登録してもエラーにはなりませんが、結果
     は未定義です。適切なアクションは、最初に unregister するか modify
     することです。これは "poll()" と比較した場合の重要な違いです。

devpoll.modify(fd[, eventmask])

   このメソッドは "unregister()" に続いて "register()" を行います。 同
   じことを明示的に行うよりも (少し) 効率的です。

devpoll.unregister(fd)

   ポーリングオブジェクトによって追跡中のファイル記述子を登録解除しま
   す。 "register()" メソッドと同様に、 *fd* は整数か、整数値を返す
   "fileno()" メソッドを持つオブジェクトを取ります。

   登録されていないファイル記述子の削除を試みるのは安全に無視されます
   。

devpoll.poll([timeout])

   登録されたファイル記述子に対してポーリングを行い、報告すべき I/O イ
   ベントまたはエラーの発生したファイル記述子毎に 2 要素のタプル "(fd,
   event)" からなるリストを返します。リストは空になることもあります。
   *fd* はファイル記述子で、 *event* は該当するファイル記述子について
   報告されたイベントを表すビットマスクです --- 例えば "POLLIN" は入力
   待ちを示し、 "POLLOUT" はファイル記述子に対する書き込みが可能を示す
   、などです。空のリストは呼び出しがタイムアウトしたか、報告すべきイ
   ベントがどのファイル記述子でも発生しなかったことを示します。
   *timeout* が与えられた場合、処理を戻すまで待機する時間の長さをミリ
   秒単位で指定します。 *timeout* が省略されたり、 -1 であったり、ある
   いは "None" の場合、そのポーリングオブジェクトが監視している何らか
   のイベントが発生するまでブロックします。

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。


エッジおよびレベルトリガポーリング (epoll) オブジェクト
=======================================================

   https://linux.die.net/man/4/epoll

   *eventmask*

   +---------------------------+-------------------------------------------------+
   | 定数                      | 意味                                            |
   |===========================|=================================================|
   | "EPOLLIN"                 | 読み込み可能                                    |
   +---------------------------+-------------------------------------------------+
   | "EPOLLOUT"                | 書き込み可能                                    |
   +---------------------------+-------------------------------------------------+
   | "EPOLLPRI"                | 緊急の読み出しデータ                            |
   +---------------------------+-------------------------------------------------+
   | "EPOLLERR"                | 設定された fd にエラー状態が発生した            |
   +---------------------------+-------------------------------------------------+
   | "EPOLLHUP"                | 設定された fd がハングアップした                |
   +---------------------------+-------------------------------------------------+
   | "EPOLLET"                 | エッジトリガ動作に設定する。デフォルトではレベ  |
   |                           | ルトリガ動作                                    |
   +---------------------------+-------------------------------------------------+
   | "EPOLLONESHOT"            | 1ショット動作に設定する。1回イベントが取り出さ  |
   |                           | れたら、その fd が内 部で無効になる             |
   +---------------------------+-------------------------------------------------+
   | "EPOLLEXCLUSIVE"          | 関連づけられた fd にイベントがある場合、1 つの  |
   |                           | epoll オブジェクトの みを起こします。デフォルト |
   |                           | では (このフラグが設定されていない場合に は)、  |
   |                           | fd に対してポーリングするすべての epoll オブジ  |
   |                           | ェクトを起こしま す。                           |
   +---------------------------+-------------------------------------------------+
   | "EPOLLRDHUP"              | ストリームソケットの他端が接続を切断したか、接  |
   |                           | 続の書き込み側のシャ ットダウンを行った。       |
   +---------------------------+-------------------------------------------------+
   | "EPOLLRDNORM"             | "EPOLLIN" と同じ                                |
   +---------------------------+-------------------------------------------------+
   | "EPOLLRDBAND"             | 優先データバンドを読み込める。                  |
   +---------------------------+-------------------------------------------------+
   | "EPOLLWRNORM"             | "EPOLLOUT" と同じ                               |
   +---------------------------+-------------------------------------------------+
   | "EPOLLWRBAND"             | 優先データに書き込みできる。                    |
   +---------------------------+-------------------------------------------------+
   | "EPOLLMSG"                | 無視される。                                    |
   +---------------------------+-------------------------------------------------+

   バージョン 3.6 で追加: "EPOLLEXCLUSIVE" was added.  It's only
   supported by Linux Kernel 4.5 or later.

epoll.close()

   epoll オブジェクトの制御用ファイル記述子を閉じます。

epoll.closed

   epoll オブジェクトが閉じている場合 True です。

epoll.fileno()

   制御用ファイル記述子の番号を返します。

epoll.fromfd(fd)

   *fd* から epoll オブジェクトを作成します。

epoll.register(fd[, eventmask])

   epoll オブジェクトにファイル記述子 *fd* を登録します。

epoll.modify(fd, eventmask)

   登録されたファイル記述子変更します。

epoll.unregister(fd)

   epoll オブジェクトから登録されたファイル記述子 *fd* を削除します。

epoll.poll(timeout=-1, maxevents=-1)

   イベントを待機します。*timeout* はタイムアウト時間で、単位は秒
   (float型) です。

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。


ポーリングオブジェクト
======================

"poll()" システムコールはほとんどの Unix システムでサポートされており
、非常に多数のクライアントに同時にサービスを提供するようなネットワーク
サーバが高いスケーラビリティを持てるようにしています。 "poll()" は対象
のファイル記述子を列挙するだけでよいため、良くスケールします。一方、
"select()" はビット対応表を構築し、対象ファイルの記述子に対応するビッ
トを立て、その後全ての対応表の全てのビットを線形探索します。
"select()" は O(最大のファイル記述子番号) なのに対し、 "poll()" は O(
対象とするファイル記述子の数) で済みます。

poll.register(fd[, eventmask])

   ファイル記述子をポーリングオブジェクトに登録します。これ以降の
   "poll()" メソッド呼び出しでは、そのファイル記述子に処理待ち中の I/O
   イベントがあるかどうかを監視します。 *fd* は整数か、整数値を返す
   "fileno()" メソッドを持つオブジェクトを取ります。ファイルオブジェク
   トも "fileno()" を実装しているので、引数として使うことができます。

   *eventmask* はオプションのビットマスクで、どの種類の I/O イベントを
   監視したいかを記述します。この値は以下の表で述べる定数 "POLLIN" 、
   "POLLPRI" 、および "POLLOUT" の組み合わせにすることができます。ビッ
   トマスクを指定しない場合、標準の値が使われ、 3 種類のイベント全てに
   対して監視が行われます。

   +---------------------+--------------------------------------------+
   | 定数                | 意味                                       |
   |=====================|============================================|
   | "POLLIN"            | 読み出し可能なデータが存在する             |
   +---------------------+--------------------------------------------+
   | "POLLPRI"           | 緊急の読み出し可能なデータが存在する       |
   +---------------------+--------------------------------------------+
   | "POLLOUT"           | 書き出しの準備ができている: 書き出し処理が |
   |                     | ブロックしない                             |
   +---------------------+--------------------------------------------+
   | "POLLERR"           | 何らかのエラー状態                         |
   +---------------------+--------------------------------------------+
   | "POLLHUP"           | ハングアップ                               |
   +---------------------+--------------------------------------------+
   | "POLLRDHUP"         | ストリームソケットの他端が接続を切断したか |
   |                     | 、接続の書き込み側のシャ ットダウンを行っ  |
   |                     | た。                                       |
   +---------------------+--------------------------------------------+
   | "POLLNVAL"          | 無効な要求: 記述子が開かれていない         |
   +---------------------+--------------------------------------------+

   登録済みのファイル記述子を登録してもエラーにはならず、一度だけ登録
   した場合と同じ効果になります。

poll.modify(fd, eventmask)

   登録されているファイル記述子 *fd* を変更する。これは、
   "register(fd, eventmask)" と同じ効果を持ちます。登録されていないフ
   ァイル記述子に対してこのメソッドを呼び出すと、 errno "ENOENT" で
   "OSError" 例外が発生します。

poll.unregister(fd)

   ポーリングオブジェクトによって追跡中のファイル記述子を登録解除しま
   す。 "register()" メソッドと同様に、 *fd* は整数か、整数値を返す
   "fileno()" メソッドを持つオブジェクトを取ります。

   登録されていないファイル記述子を登録解除しようとすると "KeyError"
   例外が送出されます。

poll.poll([timeout])

   登録されたファイル記述子に対してポーリングを行い、報告すべき I/O イ
   ベントまたはエラーの発生したファイル記述子毎に 2 要素のタプル "(fd,
   event)" からなるリストを返します。リストは空になることもあります。
   *fd* はファイル記述子で、 *event* は該当するファイル記述子について
   報告されたイベントを表すビットマスクです --- 例えば "POLLIN" は入力
   待ちを示し、 "POLLOUT" はファイル記述子に対する書き込みが可能を示す
   、などです。空のリストは呼び出しがタイムアウトしたか、報告すべきイ
   ベントがどのファイル記述子でも発生しなかったことを示します。
   *timeout* が与えられた場合、処理を戻すまで待機する時間の長さをミリ
   秒単位で指定します。 *timeout* が省略されたり、負の値であったり、あ
   るいは "None" の場合、そのポーリングオブジェクトが監視している何ら
   かのイベントが発生するまでブロックします。

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。


kqueue オブジェクト
===================

kqueue.close()

   kqueue オブジェクトの制御用ファイル記述子を閉じる。

kqueue.closed

   kqueue オブジェクトが閉じている場合 "True" です。

kqueue.fileno()

   制御用ファイル記述子の番号を返します。

kqueue.fromfd(fd)

   与えられたファイル記述子から、kqueue オブジェクトを作成する。

kqueue.control(changelist, max_events[, timeout]) -> eventlist

   kevent に対する低水準のインタフェース

   * *changelist* は kevent オブジェクトのイテラブルまたは "None"

   * *max_events* は 0 または正の整数

   * timeout in seconds (floats possible); the default is "None", to
     wait forever

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。


kevent オブジェクト
===================

https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2

kevent.ident

   イベントを特定するための値。この値は、フィルタにもよりますが、大抵
   の場合はファイル記述子です。コンストラクタでは、 ident として、整数
   値か "fileno()" メソッドを持ったオブジェクトを渡せます。 kevent は
   内部で整数値を保存します。

kevent.filter

   カーネルフィルタの名前。

   +-----------------------------+-----------------------------------------------+
   | 定数                        | 意味                                          |
   |=============================|===============================================|
   | "KQ_FILTER_READ"            | 記述子を受け取り、読み込めるデータが存在する  |
   |                             | 時に戻る                                      |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_WRITE"           | 記述子を受け取り、書き込み可能な時に戻る      |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_AIO"             | AIO リクエスト                                |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_VNODE"           | *fflag* で監視されたイベントが1つ以上発生した |
   |                             | ときに戻る                                    |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_PROC"            | プロセスID上のイベントを監視する              |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_NETDEV"          | ネットワークデバイス上のイベントを監視する    |
   |                             | (Mac OS X では利用不可)                       |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_SIGNAL"          | 監視しているシグナルがプロセスに届いたときに  |
   |                             | 戻る                                          |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_TIMER"           | 任意のタイマを設定する                        |
   +-----------------------------+-----------------------------------------------+

kevent.flags

   フィルタアクション。

   +-----------------------------+-----------------------------------------------+
   | 定数                        | 意味                                          |
   |=============================|===============================================|
   | "KQ_EV_ADD"                 | イベントを追加または修正する                  |
   +-----------------------------+-----------------------------------------------+
   | "KQ_EV_DELETE"              | キューからイベントを取り除く                  |
   +-----------------------------+-----------------------------------------------+
   | "KQ_EV_ENABLE"              | control() がイベントを返すのを許可する        |
   +-----------------------------+-----------------------------------------------+
   | "KQ_EV_DISABLE"             | イベントを無効にする                          |
   +-----------------------------+-----------------------------------------------+
   | "KQ_EV_ONESHOT"             | イベントを最初の発生後無効にする              |
   +-----------------------------+-----------------------------------------------+
   | "KQ_EV_CLEAR"               | イベントを受け取った後で状態をリセットする    |
   +-----------------------------+-----------------------------------------------+
   | "KQ_EV_SYSFLAGS"            | 内部イベント                                  |
   +-----------------------------+-----------------------------------------------+
   | "KQ_EV_FLAG1"               | 内部イベント                                  |
   +-----------------------------+-----------------------------------------------+
   | "KQ_EV_EOF"                 | フィルタ依存のEOF状態                         |
   +-----------------------------+-----------------------------------------------+
   | "KQ_EV_ERROR"               | 戻り値を参照                                  |
   +-----------------------------+-----------------------------------------------+

kevent.fflags

   フィルタ依存のフラグ。

   "KQ_FILTER_READ" と "KQ_FILTER_WRITE" フィルタのフラグ:

   +------------------------------+----------------------------------------------+
   | 定数                         | 意味                                         |
   |==============================|==============================================|
   | "KQ_NOTE_LOWAT"              | ソケットバッファの最低基準値                 |
   +------------------------------+----------------------------------------------+

   "KQ_FILTER_VNODE" フィルタのフラグ:

   +------------------------------+----------------------------------------------+
   | 定数                         | 意味                                         |
   |==============================|==============================================|
   | "KQ_NOTE_DELETE"             | *unlink()* が呼ばれた                        |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_WRITE"              | 書き込みが発生した                           |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_EXTEND"             | ファイルのサイズが拡張された                 |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_ATTRIB"             | 属性が変更された                             |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_LINK"               | リンクカウントが変更された                   |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_RENAME"             | ファイル名が変更された                       |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_REVOKE"             | ファイルアクセスが破棄された                 |
   +------------------------------+----------------------------------------------+

   "KQ_FILTER_PROC" フィルタフラグ:

   +------------------------------+----------------------------------------------+
   | 定数                         | 意味                                         |
   |==============================|==============================================|
   | "KQ_NOTE_EXIT"               | プロセスが終了した                           |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_FORK"               | プロセスが *fork()* を呼び出した             |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_EXEC"               | プロセスが新しいプロセスを実行した           |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_PCTRLMASK"          | 内部フィルタフラグ                           |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_PDATAMASK"          | 内部フィルタフラグ                           |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_TRACK"              | *fork()* の呼び出しを超えてプロセスを監視す  |
   |                              | る                                           |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_CHILD"              | *NOTE_TRACK* に対して子プロセスに渡される    |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_TRACKERR"           | 子プロセスにアタッチできなかった             |
   +------------------------------+----------------------------------------------+

   "KQ_FILTER_NETDEV" フィルタフラグ (Mac OS X では利用不可):

   +------------------------------+----------------------------------------------+
   | 定数                         | 意味                                         |
   |==============================|==============================================|
   | "KQ_NOTE_LINKUP"             | リンクアップしている                         |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_LINKDOWN"           | リンクダウンしている                         |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_LINKINV"            | リンク状態が不正                             |
   +------------------------------+----------------------------------------------+

kevent.data

   フィルタ固有のデータ。

kevent.udata

   ユーザー定義値。
