首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fork和现有线程?

fork和现有线程?
EN

Stack Overflow用户
提问于 2009-07-02 11:57:33
回答 2查看 6.1K关注 0票数 16

在linux系统上,子进程是否以与父进程相同的方式查看现有线程?

代码语言:javascript
复制
int main() {

  //create thread 1

  int child_pid = fork();

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

由于为子进程复制了整个地址空间,因此线程的状态会发生什么变化。如果上述代码段中的线程1正在等待条件信号,该怎么办?它在子进程中是否也处于等待状态?

EN

回答 2

Stack Overflow用户

发布于 2009-07-02 14:20:00

如今,Linux上的线程试图保持POSIX兼容。只复制调用线程,而不复制其他线程(请注意,在Solaris上,您可以根据链接到的库来选择fork的作用)

来自http://www.opengroup.org/onlinepubs/000095399/functions/fork.html (POSIX2004):

应使用单线程创建进程。如果多线程进程调用fork(),则新进程应包含调用线程的副本及其整个地址空间,可能包括互斥和其他资源的状态。因此,为了避免错误,子进程可以仅执行异步信号安全操作,直到调用exec函数之一时为止。为了维护跨fork()调用的应用程序不变量,可以通过pthread_atfork()函数来建立分叉处理程序。

fork()的POSIX2018规范与此类似。

票数 21
EN

Stack Overflow用户

发布于 2009-07-02 13:00:40

线程不是使用fork()从linux系统上的子进程继承而来的。这里有一个深入的来源:http://linas.org/linux/threads-faq.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1073954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档