【发布时间】:2019-05-05 04:28:48
【问题描述】:
我对在多线程进程上使用 fork 有疑问。 如果一个进程有多个线程(已经使用 pthread_create 创建并执行了 pthread_join)并且我调用了 fork,它会复制分配给子进程中线程的相同函数还是创建一个我们可以重新分配函数的空间?
【问题讨论】:
-
别这样,好吗?我曾经在一个产品上工作,其中一个多线程进程需要偶尔启动其他进程。我们的策略是让它在启动时创建一个单线程辅助进程,然后再创建任何新线程。然后,每当它需要启动一个新的子进程时,它就会向助手发送一条消息,要求助手执行此操作。
-
好的,既然你创建了一个单线程进程并启动了新进程,那么子进程总是有一个线程(执行的主线程)?
-
要明确一点,长寿的主进程首先创建了辅助进程,然后创建了很多线程。创建助手后,它从未直接创建任何其他进程。辅助进程没有创建任何新线程。它是严格的单线程的,这使得助手可以安全地创建新进程。由助手创建的瞬态子进程没有任何限制。他们可以做任何他们需要做的事情。
标签: multithreading operating-system system-calls