私はこのフォークが新しいプロセスを作成することを知っていますが、フォークを呼び出す前に実行していたスレッドについては、それも変更されますか?(新しいスレッドの新しいプロセス "子プロセス"スレッドIDは新しいプロセスをフォークした後に変更されますか?
コンパイルし、次のCのテストを実行するには、スレッドIDが同じままであることを確認:
pthread_t threadId1, threadId2;
threadId1 = pthread_self();
if (fork() == 0)
{
threadId2 = pthread_self();
if (pthread_equal(threadId1,threadId2)) // edited
{
printf("we are in the same thread \n");
}
else
{
printf("we are on different threads \n");
}
スレッドが親と子プロセスの間で共有されている理由誰かが私に説明してもらえますか?
スレッドIDは*不透明な*データなので、それらの直接比較は使用しないでください。代わりに['pthread_equal'](http://man7.org/linux/man-pages/man3/pthread_equal.3.html)を使用してください。 –
不透明なpthread_t構造体ではなく、gettid()を使用します。 – Claudio
はい、私は単に、フォーク前のスレッドIDと子プロセスの比較結果を比較して出力します。 – Bionix1441