簡體   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