Solaris 10 リリースより前のリリースでは、Solaris スレッドと POSIX スレッドによる fork() の定義が異なっていました。fork() の問題の詳細は、「プロセスの作成: exec と exit の問題」を参照してください。
Solaris libthread は、fork() と fork1() の両方をサポートしていました。fork() 呼び出しには、「汎用 fork」セマンティクスがあります。fork() は、スレッド、LWPを含めて、プロセス内のすべてを複製し、親の完全なクローンを生成しました。一方、fork1() 呼び出しで作成されるクローンはスレッドを 1 つしかもちませんでした。プロセスの状態とアドレス空間は複製されますが、スレッドについては呼び出しスレッドが複製されるだけでした。
POSIX libpthread は 、fork() のみをサポートしていました。そのセマンティクスは、Solaris スレッドにおける fork1() と同じです。
fork() のセマンティクスが「汎用 fork」と「fork1」のどちらになるかは、どちらのライブラリを使用するかで決まりました。-lthread を使ってリンクすれば、fork() に「汎用 fork」セマンティクスが割り当てられます。-lpthread を使ってリンクすれば、fork() に「fork1」セマンティクスが割り当てられます。
Solaris 10 リリースから、Solaris スレッドと POSIX スレッドの fork() のセマンティクスが共通になりました。つまり、 fork1() セマンティクスが呼び出し側だけを複製するようになりました。すべてを複製するセマンティクスが必要なアプリケーションには、新しい関数 forkall () が提供されています。
詳細は、「マルチスレッドプログラムのコンパイルとリンク」を参照してください。