日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
THR_NEW(2) FreeBSD システムコールマニュアル THR_NEW(2) 名称 thr_new -- 実行の新しいスレッドを作成する ライブラリ 標準 C ライブラリ (libc, -lc) 書式 #include <sys/thr.h> int thr_new(struct thr_param *param, int param_size); 解説 この関数は、スレッド化を実装することを目的としています。通常のアプリケー ションは、代わりに pthread_create(3) を呼び出すべきです。 thr_new() システムコールは、現在のプロセスのコンテキストでの実行の新しい カーネルでスケジューリングされたスレッドを作成します。新しく作成されたス レッドは、プロセスの既存のカーネルでスケジューリングされたスレッドでプロ セスのすべての属性を共有しますが、プライベートなプロセッサの実行状態があ ります。新しいスレッドのためのマシンのコンテキストは、コプロセッサの状態 を含んで、作成しているスレッドのコンテキストからコピーされます。FPU の状 態と特有のマシンレジスタは、コピーから除外されます。これらは、ABI 要件と syscall パラメータにしたがって設定されます。新しいスレッドのための FPU 状 態は、クリーンするために再初期化されます。 param 構造体は、スレッド作成に影響しているパラメータを供給します。構造体 は、次のように struct thr_param { void (*start_func)(void *); void *arg; char *stack_base; size_t stack_size; char *tls_base; size_t tls_size; long *child_tid; long *parent_tid; int flags; struct rtprio *rtp; }; そして、次のフィールドを含むように <sys/thr.h> ヘッダで定義されます: start_func スレッドのエントリ関数へのポインタ。カーネルは、新しいスレッ ドが、ユーザ空間への最初のリターンで関数を実行し始めるように 準備します。 arg エントリ関数に供給される不透明な引数。 stack_base スタックのベースアドレス。スタックは、呼び出し側によって割り 付けられなければなりません。いくつかのアーキテクチャで、ABI は、start_func のための実行環境を保証するためにシステムが情報 をスタックに置くことを必要とするかもしれません。 stack_size スタックサイズ。 tls_base TLS ベースアドレス。TLS ベースの値は、新しいスレッドのコンテ キストで、ABI 定義されたマシンのレジスタにロードされます。 tls_size TLS サイズ。 child_tid 子プロセスの使用のために新しいスレッド識別子を格納するアドレ ス。 parent_tid 親プロセスの使用のために新しいスレッド識別子を格納するアドレ ス。 child_tid と parent_tid の両方は、parent_tid がスレッドの作成 者によって使用される間に、child_tid が、thr_self(2) syscall を発行せずにそのスレッド識別子を取得するために新しいスレッド によって使用される目的で提供されます。新しいスレッドは、親プ ロセスが、それにアクセスするのに十分に実行するチャンスがある 前に、そのスレッドデータを終了して、解放するので、後者は、 child_tid から分離されます。 flags スレッド作成フラグ。flags メンバは、次のフラグを指定します: THR_SUSPENDED サスペンド状態の新しいスレッドを作成しま す。フラグは、現在実装されていません。 THR_SYSTEM_SCOPE システム範囲スレッドを作成します。フラグ は、現在実装されていません。 rtp 新しいスレッドのためのリアルタイムのスケジューリングの優先 度。作成スレッドから優先度を継承するために NULL であるかもし れません。 param_size 引数は、param 構造体のサイズに設定されるべきです。 追加のスレッドの最初の成功した作成の後に、プロセスは、マルチスレッドとし てカーネルによってマークされます。特に、P_HADTHREADS フラグは、プロセスの p_flag (ps(1) の出力で目に見える) に設定され、いくつかの操作は、マルチス レッドのモードで実行されます。例えば、execve(2) システムコールは、成功し た実行でそれを呼び出しことを除いて、すべてのスレッドを終了します。 戻り値 成功するなら、thr_new() は、0 を返し、そうでなければ、-1 が返され、errno は、エラーを示す値に設定されます。 エラー thr_new() 操作は、次のエラーを返します: [EFAULT] param 引数によって指されたメモリが、有効ではありませ ん。 [EFAULT] param 構造体 child_tid, parent_tid または rtp 引数に よって指されたメモリが、有効ではありません。 [EFAULT] 指定されたスタックベースが、無効か、または、カーネル が、要求された初期のデータをスタックに置くことができま せんでした。 [EINVAL] param_size 引数が、負の値を指定するか、または、値が、 カーネルが解釈できる最も大きい struct param サイズより 大きくなっています。 [EINVAL] rtp メンバが、NULL ではなく、無効のスケジューリングパ ラメータを指定しています。 [EINVAL] 指定された TLS ベースが、無効です。 [EPERM] 呼び出し側には、スケジューリングパラメータまたはスケ ジューリングポリシを設定するためのパーミッションがあり ません。 [EPROCLIM] 新しいスレッドの作成が、RACCT_NTHR 制限を越えていま す、racct(2) を参照。 [EPROCLIM] 新しいスレッドの作成が、 kern.threads.max_threads_per_proc sysctl(2) 制限を越え ています。 [ENOMEM] 新しいスレッドの構造体を割り付けるための十分なカーネル メモリがありません。 関連項目 ps(1), execve(2), racct(2), thr_exit(2), thr_kill(2), thr_kill2(2), thr_self(2), thr_set_name(2), _umtx_op(2), pthread_create(3) 規格 thr_new() システムコールは、非標準であり、IEEE Std 1003.1-2001 (``POSIX.1'') pthread(3) の機能を実装するために 1:1 スレッドライブラリ (libthr, -lthr) によって使用されます。 FreeBSD 11.4 June 2, 2016 FreeBSD 11.4