プロセスまたはスレッド用のタスク構造体が与えられた場合、同じプロセスに属する他のすべてのスレッドを反復するイディオムは何ですか?カーネル:プロセスの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. Linuxカーネルでsk_buffのオーナーソケットを見つける方法は?
- 5. 干し草の中のニードルを見つける(プロセスのスレッド)
- 6. プロセスを追跡しているユーザーを見つける方法
- 7. リストからすべての重複を見つける方法<string>?
- 8. トポロジカルソートのすべての結果を見つける方法
- 9. すべての依存DLLを見つける方法
- 10. すべてのデータベース参照を見つける方法
- 11. JQueryですべてのダイアログを見つける方法
- 12. Cocoa App:実行中のプロセスを見つける方法
- 13. プロセスのキャッシュアクセストレースを見つける方法は?
- 14. linuxの親プロセスIDを見つける方法
- 15. 行列からすべての極大を見つける
- 16. パーセンテージでスレッドの作業を見つける方法は?
- 17. すべてのローカルネットワークブロードキャストアドレスを見つける
- 18. すべてのimplicitsを見つける
- 19. すべてのテキストノードを見つける
- 20. 特定のカーネルモジュールを使用してプロセスのリストを見つける方法は?
- 21. 実行中のプロセスのメモリリークを見つける方法はありますか?
- 22. 値の配列で3つのシーケンスをすべて見つける方法
- 23. Linuxカーネルの `current` task_structのcommフィールドを出力する
- 24. C#:現在のプロセスを見つける
- 25. GTKでプロセス用に開いているウィンドウをすべて見つけ出す
- 26. pythonの関数のすべてのkwargをcliから見つける方法はありますか?
- 27. Linuxカーネルのtask_structに複雑なリストを追加する
- 28. テーブル内の異なる値のペアをすべて見つける方法
- 29. 死にかけているプロセスのコールスタックを取得する方法、つまりプロセスがどのように終了しているかを調べる方法
- 30. プロセスのすべてのスレッドのスレッドを印刷します