私はプログラム名test.cを書きます。このプログラムでは、pthead_createによって3つのスレッドを作成しました。これらのスレッドは、prctl(PR_SET_NAME、name)によるthread0、thread1、thread2という名前です。スレッド関数のコードは次のとおり新しいユーザー空間を作成すると、カーネルのプロセスリストに表示されますか?
void *output(void *arg) {
char *x = (char *) arg;
char name[40] = "thread";
strcat(name, x);
prctl(PR_SET_NAME, name);
while(1){
printf("%s\n", name);
sleep(10000);
};
}
それから関数が各task_struct INFOMATIONのINTカーネルプロセスリストを印刷するカーネルモジュールprint.cを書き込みます。
struct task_struct *task = &init_task;
do{
printk("%s\n", task->comm);
}while((task=next_task(task)) != &init_task);
私はプログラムtest.cを正しく実行してから、モジュールprint.koを正しくinsmodします。間違いなく、私は3つのスレッドの情報が見つかりませんでした。ですから、pthread_createによって作成されたスレッドは、カーネルのプロセスリストには表示されません。この意見は正しいのですか?
なぜプロセスリストにスレッドが表示されると思いますか? – StoryTeller
@StoryTeller Linuxでは、ユーザー空間スレッドはカーネルプロセスなので、これは履歴(プロセスとカーネルスケジューリングエンティティを区別するカーネルの前から)の遺物であるが、それはそのものであり、我々はそれを生きなければならない。 –
@DavidSchwartz - LinuxThreadsがpthreadsの実装を廃止したことは知っています。それは今日でもまだそうですか? – StoryTeller