繁体   English   中英

多线程程序创建新进程时会发生什么?

[英]What happens when multi thread program creates new processes?

我想详细了解一下,如果一个带有多个线程的C程序创建新进程,会发生什么呢? 行为取决于哪个线程正在创建新进程还是多少线程创建新进程?

使用pthreads时,在调用fork时,仅在新进程中派生调用线程。

Linux手册页中

子进程由一个线程创建,该线程称为fork()。 父级的整个虚拟地址空间都在子级中复制,包括互斥体的状态,条件变量和其他pthreads对象; 指某东西的用途
pthread_atfork(3)可能有助于解决可能引起的问题。

但是,Solaris上有一些版本的fork可以复制所有线程。

Solaris手册页

对forkall()或forkallx()的调用将在子进程中复制父进程中的所有线程(请参见thr_create(3C)和pthread_create(3C))。 对fork1()或forkx()的调用仅复制子进程中的调用线程。

对fork()的调用与对fork1()的调用相同; 在子进程中仅复制调用线程。 这是fork()的POSIX指定行为。

在Solaris 10之前的Solaris发行版中,fork()的行为取决于应用程序是否与POSIX线程库链接。 当与-lthread(Solaris线程)链接但未与-lpthread(POSIX线程)链接时,fork()与forkall()相同。 与-lpthread链接时,是否也与-lthread链接,fork()与fork1()相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM