メイン スレッドが新しいスレッドを作成し、新しいスレッドが子プロセスを作成するプログラムを作成します。新しいスレッドとフォークされたプロセスを追跡するのに苦労しているので、誰かから賢明な答えを得たい.
私の質問は
pthread_create
か?私の質問を読んでくれてありがとう。
異なるシステムには異なる POSIX スレッド実装があり、これにより内部が公開される可能性があるため、これの一部は OS に少し依存しています。
POSIX はpthread_atfork
、いくつかの問題に対処するためのやや鈍い手段として提供されていますが、それでも私にはかなり面倒に見えます。
システムが「ユーザー ランド スレッド」と「カーネル スレッド」の間で 1 対 1 のマップを使用する場合、clone
またはrfork
スレッド間のデータの適切なユーザー空間共有を実現するために、それfork
を呼び出す (単一の) スレッドを複製するだけです。ただし、システムに多対多のスタイル マッピングがある場合 (つまり、1 つのユーザー プロセスが複数のスレッドを処理し、少なくともシステム コールのブロックに入る前に)、fork
複数のスレッドが内部的に複製される可能性があります。POSIX では、1 つのスレッドのみを複製したように見えるはずなので、それは表示されないはずですが、すべてのシステムがこれをどの程度うまく実装しているかはわかりません。
http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-themには、一般的なアドバイスがいくつかあります(Linux 中心で、明らかに、それでも有用です)。
fork
スレッド内に入れたいが、入れたくない特別な理由はありますexec
か? 一般に、より多くのコードを並行して実行したい場合は、さらに別のスレッドをスピンオフします (つまり、スレッドを実行することを選択したら、必要な場合を除いてすべてをスレッドで行いますfork
。exec
失敗したexec
場合は、単に_exit
)。