私はシステムコールを打ち負かそうとしており、set_tid_addressがどのように動作するのか理解したいと思っています。基本的に私が読んだことは、実行されるプログラムやプロセスのPIDを返すということです。システムコールset_tid_addressはいつ使われますか?
私はこれをlsでテストしましたが、uptime、topなどのコマンドではset_tid_addressが使用されていません。何故ですか?
私はシステムコールを打ち負かそうとしており、set_tid_addressがどのように動作するのか理解したいと思っています。基本的に私が読んだことは、実行されるプログラムやプロセスのPIDを返すということです。システムコールset_tid_addressはいつ使われますか?
私はこれをlsでテストしましたが、uptime、topなどのコマンドではset_tid_addressが使用されていません。何故ですか?
clone()
システムコールはchild_tidptr
(別clone()
引数)の値がクリアされることを、CLONE_CHILD_CLEARTID
旗を取ることができ、関連するのfutexはとき、子スレッドが終了するウェイクアップ信号。これは、pthread_join()
を実装するために使用されます(親スレッドはフューテックスで待機します)。
set_tid_address()
は、最初のスレッドでpthread_join()
になります。以下LKMLスレッドで詳細情報:一部のプログラムはset_tid_address()
を呼び出し、他の人がいない理由として
[patch] threading fix, tid-2.5.47-A3
[patch] user-vm-unlock-2.5.31-A2
、答えは簡単です。 libpthreadに(直接的または間接的に)リンクされたプログラムは、set_tid_address
を呼び出します。 ls
はlibpthread
にリンクされているlibrt
にリンクされているため、NPTLの初期化が実行されます。
Linux Programmer's Manualによれば、set_tid_addressが使用された:それが終了すると
セットポインタがID
を通すために、それが呼び出したプロセスのPIDを返します。残念なことに、実際にこのシステムコールを使用したいときは、このマニュアルではあいまいです。
いずれの場合でも、なぜこれらのコマンドがset_tid_address
を使用していると思いますか?
これは、なぜ私がいくつかの使用法といくつかの理由を知りたいと思ったものです... – krisdigitx
@ninjalj ..知っている情報に感謝.. – krisdigitx