プロセスまたはスレッド用のタスク構造体が与えられた場合、同じプロセスに属する他のすべてのスレッドを反復するイディオムは何ですか?カーネル:プロセスのtask_structからすべてのスレッドを見つける方法?
3
A
答えて
13
Linuxはプロセス(タスク)とスレッドを区別しません。ライブラリ呼び出しfork()とpthread_create()は同じシステムコールclone()を使用します。 fork()とpthread_create()の違いは、clone()に渡されるビットマスクです。このビットマスクは、どのリソース(メモリ、ファイル、ファイルシステム、シグナルハンドラなど)を記述します。詳細については、man clone(2)を参照してください。
とにかく、新しいプロセスが同じスレッドグループに属することを示すclone()呼び出しにスレッドグループと特別なフラグと呼ばれるものがあります。このメカニズムは、通常、ビットマスクにCLONE_THREADを指定してclone()で作成されたすべてのタスクをまとめて保持するために使用されます。 このスレッドには、sched.hインクルードファイルにマクロ* while_each_thread *が存在します。これは次のように使用されます:
struct task_struct *me = current();
struct task_stuct *t = me;
do {
whatever(t);
}while_each_thread(me, t);
関連する問題
- 1. カーネル:pidでtask_structを見つける効率的な方法は?
- 2. プロセスのtask_structからプロセスを所有しているユーザーを見つける方法はありますか?
- 3. プロセスIDが与えられたプロセスのすべてのスレッドを見つける
- 4. iftop - これらのポートを見つける方法関連プロセス
- 5. 干し草の中のニードルを見つける(プロセスのスレッド)
- 6. Linuxカーネルでsk_buffのオーナーソケットを見つける方法は?
- 7. struct task_structのLinuxカーネルNUMA関連変数
- 8. プロセスを追跡しているユーザーを見つける方法
- 9. リストからすべての重複を見つける方法<string>?
- 10. 新しいLinuxカーネルでスタックメモリセグメントを見つける方法
- 11. ノードパッケージのすべてのオプションを見つける方法は?
- 12. JavaScriptでInDesignのすべてのテキストフレームを見つける方法
- 13. python protobuff内のすべてのメッセージを見つける方法
- 14. トポロジカルソートのすべての結果を見つける方法
- 15. 私のソリューションですべてのビルドイベントを見つける方法
- 16. ndarrayのすべてのargmaxを見つける方法
- 17. div内のすべてのリンクを見つける方法
- 18. スタックされているスレッドを見つける方法
- 19. どのプロセスが実行されているかを見つける方法
- 20. AndroidですべてのリソースIDを見つける方法
- 21. すべてのデータベース参照を見つける方法
- 22. すべてのコントローラとアクションを見つける方法
- 23. JQueryですべてのダイアログを見つける方法
- 24. openSUSE:ビルドサービス - すべてのリンクパッケージを見つける方法
- 25. すべての依存DLLを見つける方法
- 26. Cでファイルを保持するプロセスを見つける方法
- 27. linuxの親プロセスIDを見つける方法
- 28. Cocoa App:実行中のプロセスを見つける方法
- 29. プロセスのキャッシュアクセストレースを見つける方法は?
- 30. バットファイルで実行中のプロセスを見つける方法