叉和现有的线程?叉和现有的线程?(fork and existing threads?)

2019-05-14 11:44发布

在Linux系统上,并在子进程查看现有线程方式与父进程一样吗?

int main() {

  //create thread 1

  int child_pid = fork();

  if ( 0 == child_pid)
  {
       ..
  }
  else
  {
       ..
  }

由于整个地址空间将被复制子进程,会发生什么变化线程的状态。 如果上述部分线程1正在等待一个条件信号是什么。 它是在子过程中的等待状态中呢?

Answer 1:

在Linux线程时下试图留POSIX complient。 只有调用线程复制,没有其它线程(请注意,例如,在Solaris上,你可以选择你根据链接库什么什么叉子一样)

从http://www.opengroup.org/onlinepubs/000095399/functions/fork.html :

的过程应与一个单独的线程来创建。 如果一个多线程进程调用fork(),新工艺应包含调用线程的一个副本,它的整个地址空间,可能包括互斥和其他资源的状态。 因此,为了避免错误,子进程可能仅执行异步信号安全操作,直到为exec函数被调用时为止。 叉处理程序可以由pthread_atfork()函数的装置,以便保持整个叉应用不变量来建立()调用。



Answer 2:

线程不从子过程中使用叉继承Linux系统上()。 在深入源是在这里: http://linas.org/linux/threads-faq.html



文章来源: fork and existing threads?