私には、多くの疑問を引き起こしている 3 つの質問があります。
プログラム内の 1 つのスレッドが を呼び出す
fork()場合、新しいプロセスはすべてのスレッドを複製しますか、それとも新しいプロセスはシングルスレッドですか?スレッドが を呼び出した場合
exec()、パラメータで指定されたプログラムは、exec()すべてのスレッドを含むプロセス全体を置き換えますか?システムコールはプリエンプティブですか? たとえば、システム コールの途中でプロセスをスケジュールできるかどうか。
私には、多くの疑問を引き起こしている 3 つの質問があります。
プログラム内の 1 つのスレッドが を呼び出すfork()場合、新しいプロセスはすべてのスレッドを複製しますか、それとも新しいプロセスはシングルスレッドですか?
スレッドが を呼び出した場合exec()、パラメータで指定されたプログラムは、exec()すべてのスレッドを含むプロセス全体を置き換えますか?
システムコールはプリエンプティブですか? たとえば、システム コールの途中でプロセスをスケジュールできるかどうか。
execからman execve: _
呼び出しスレッド以外のすべてのスレッドは、
execve().
からman fork:
子プロセスは、単一のスレッド ( を呼び出したスレッド) で作成され
fork()ます。
書き込み #3: はい、直接的または間接的に別のスレッドを実行可能にするシステム コールを呼び出すことができます。そして、そのスレッドの優先度が現在のスレッドよりも高く、システムがその時点でそれをスケジュールするように設計されている場合は、そうすることができます。