回答:
Linuxのスレッドとプロセスにはまったく違いはありません。あなたが見ればクローン(2)あなたは共有されているかを決定するフラグのセット、そしてどのようなスレッド間で共有されていないが表示されます。
従来のプロセスは、何も共有しない単なるスレッドです。Linuxで必要なコンポーネントを共有できます。
これは、はるかに大きな違いがある他のOS実装には当てはまりません。
ドキュメントはかなりわかりにくいので、ここに「実際の」Linuxモデルを示します。
getpid()
任意のプロセスから呼び出すと、TGID(=「メインスレッド」PID)が返されます。gettid()
プロセスから呼び出すと、そのPID(!)が返されます。clone(2)
システムコールであらゆる種類のプロセスを作成できます。ls /proc
同様にリストできるフォルダーの数値名/proc/NUMBER
、/proc/TGID/task
同様にフォルダの数値名/proc/TGID/task/NUMBER
、ls /proc
、あなたはまだできますcd /proc/any_PID
。結論:カーネルの観点から見ると、プロセスのみが存在し、それぞれが独自の一意のPIDを持ち、いわゆるスレッドは単なる異なる種類のプロセスです。
注: Linuxでの「スレッド」の概念の実装は語彙の混乱を招き、getpid()
あなたが嘘をついていると思っていることをしない場合、その動作はPOSIX互換性に従うためです(スレッドは共通のPIDを共有することになっています) 。
スレッドは、Linuxでのプロセスです。これらは、clone
システムコールで作成され、プロセスkill
と同様に、システムコールを介してシグナルを送信できるプロセスIDを返します。スレッドプロセスはps
出力に表示されます。clone
コールは、スレッド処理で共有されているどのくらいの親プロセスの環境の決定フラグを渡されます。
pthreads(7)
は、現在のNPTL(ネイティブPOSIXスレッドライブラリ)実装では、「プロセス内のすべてのスレッドは同じスレッドグループに配置され、スレッドグループのすべてのメンバーは同じPIDを共有します」と言います。廃止されたLinuxThreads実装では、各「スレッド」には独自のPIDがあります。