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