Multithreading 子进程是否与其父进程共享任何资源?

Multithreading 子进程是否与其父进程共享任何资源?,multithreading,subprocess,Multithreading,Subprocess,我读了下面的内容,想知道这是可能的还是正确的 创建一个应用程序进程A,该进程执行并创建第一个 执行应用程序进程B.A的线程 线程可以在应用程序进程A中创建,以 执行代理程序线程或进程C。因此,应用程序进程B和代理程序线程或进程C可以共享操作系统分配的资源 我的问题是: 是否共享由进程a创建的进程B和线程C 有什么资源吗? 是否共享由进程a创建的进程B和进程C 有什么资源吗? 我认为流程的资源是隔离的,即使它们是由其他流程父级创建/执行的。 如果我错了,我会很高兴从上面列出的用例中获得他们共享的资

我读了下面的内容,想知道这是可能的还是正确的

创建一个应用程序进程A,该进程执行并创建第一个 执行应用程序进程B.A的线程 线程可以在应用程序进程A中创建,以 执行代理程序线程或进程C。因此,应用程序进程B和代理程序线程或进程C可以共享操作系统分配的资源

我的问题是:

是否共享由进程a创建的进程B和线程C 有什么资源吗? 是否共享由进程a创建的进程B和进程C 有什么资源吗? 我认为流程的资源是隔离的,即使它们是由其他流程父级创建/执行的。 如果我错了,我会很高兴从上面列出的用例中获得他们共享的资源,以及在哪些情况下共享的资源,以及在哪些操作系统中共享的资源

谢谢! 乔:这是可能的

有两个线程,一个生成子进程B,另一个生成子进程C。由于这两个线程都属于相同的共享地址空间,因此线程本身共享IO资源和内存


子进程通常可能与父进程共享文件句柄和其他资源,但这取决于操作系统,而不是您的应用程序应该关注的问题。

我最初对两个问题的回答都是否定的,但在John的评论之后,我要补充一点——由于文件描述符是如何在父进程和子进程之间共享的,两个同级进程可能最终在它们之间共享文件描述符

现在有人能简单地向我解释一下文件描述符吗?是的,答案是

父进程A可能与其子进程B和C共享文件描述符,因此B&C将根据操作系统的决定共享文件描述符

除此之外,线程C不会与进程B共享任何资源,因为该线程属于进程A,进程C也不会与从同一父进程创建的另一个进程B共享任何资源

如果进程B和C共享任何内容,那么它将只与它们的父进程共享。对于某些情况,不管B和C是从同一父级创建的,也不管C是进程还是线程,B和C都不会共享任何内容。引用维基百科的一篇文章:

通常,子进程只执行一小部分操作 在停止执行有利于该计划的计划之前 它只需要很少的父级数据(如果有的话) 结构


有多种方法可以实现进程间通信,如IPC,可以看到它们。

同一进程的线程共享: 工艺说明, 描述符, 信号和信号处理器, 当前工作目录,
用户和组ID。

您能提供链接到您阅读的位置吗?这是客户的内部请求,我想在响应之前验证我没有遗漏任何内容,如果可能的话!,去学习如何做到这一点@HannoBinder这证明了他们除了标志之外什么都不共享,这意味着一方不能访问另一方的内存资源。这应该是显而易见的,但我想确定!这表明资源是继承的。其中包括文件描述符和环境块。如果你问的是共享内存,那么不,内存不会在进程之间自动共享。线程共享内存,但是每个线程执行新的进程-进程没有任何东西可以与线程共享。所以我想你的意思是不可能,因为这是你在第二部分写的!进程B和C不共享内存,但它们可以共享其他资源。我想你误解我了。是的,可能我不清楚,我指的是内存,访问堆/内存/变量。。。。相互之间,不是操作系统,也不是文件或硬件资源:谢谢,我知道2进程如何通过共享内存/IPC进行通信。。。。但我问的是进程之间的资源。如果进程A有打开的文件句柄,那么这些句柄将对B和C进程都可用,因此共享它们。@John:我同意。你是对的。。。我正在更新我的答案。约翰:奇怪的是,在我所学的两门操作系统课程中,这一点从未被指出。谢谢各位,我想很明显,当我说共享资源时,它意味着内存、堆栈。。。而不是文件:。真棒的回应!!!