【发布时间】:2021-10-30 23:24:52
【问题描述】:
在多线程程序中调用 fork() 会阻塞所有线程吗?还是只会阻塞调用线程?
('calling fork()'是指创建子进程的过程。)
【问题讨论】:
-
你从哪里得到关于 fork 阻塞调用者的信息? Fork 不会阻塞任何东西。
-
在多线程程序中分叉几乎总是一个错误。 linuxprogrammingblog.com/…
-
在具有多个活动线程的应用程序中,分叉实际上是未定义的行为。
-
有一个多线程应用程序中常用fork()的场景:允许
exec(2)一个新程序在不同的进程中。为此,有必要使用 fork(),因为您需要一个新的虚拟空间,而 exec() 会完全覆盖它。如果您在多线程应用程序中执行 exec() 调用,您将看到所有线程都在死机。