【问题标题】:Do sub process share any resources with his parent process?子进程是否与其父进程共享任何资源?
【发布时间】:2015-11-17 02:38:39
【问题描述】:

我阅读了以下内容,想知道这是否可能或正确!

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

我的问题是:

  1. 做一个进程B和一个进程A创建的线程 C,共享 有资源吗?
  2. 做一个进程B和一个进程A创建的进程 C,共享 有资源吗?

我认为一个进程的资源是隔离的,即使它们是由其他进程(父进程)创建/执行的。 如果我错了,我会很高兴从上面列出的用例中获得他们共享的资源以及在哪些情况下,以及在哪个操作系统(Windows/iOS/Linux)中。

谢谢! 乔

【问题讨论】:

  • 你能把链接给你读到的地方吗?
  • 这是来自客户的内部请求,我想在回复之前确认我没有遗漏任何内容,如果可能的话!了解如何完成!
  • @HannoBinder 这证明他们不共享任何东西(除了可能的标志),这意味着一个人无法访问另一个人的资源(内存)。这应该很明显,但我想确定!
  • 嗯,说明资源是继承的。文件描述符和环境块就是其中之一。如果您询问共享内存,那么不,内存不会在进程之间自动共享。

标签: multithreading subprocess


【解决方案1】:

我对您的两个问题的最初回答都是,但是在 John 的 cmets 之后,我要补充一点 - 由于父进程和子进程之间共享文件描述符的方式,两个兄弟进程可能最终在它们之间共享文件描述符。

现在有人可以简单地向我解释文件描述符吗?是的,答案是here.

父进程 A 可以与其子进程 B 和 C 共享文件描述符,因此 B 和 C 将共享文件描述符(但由操作系统决定)。

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

如果进程 B 和 C 共享任何东西,那么它将只与它们的父进程共享。对于某些 B 和 C 不会共享任何东西,无论它们是从同一个父级创建的,也不管 C 是进程还是线程。引用维基百科文章here

通常,子进程只执行一小部分操作 在它停止执行其程序以支持该程序之前 被启动,并且它只需要很少的,如果有的话,它的父数据 结构。

有多种方法可以实现进程间通信(又名 IPC),可以在 here 看到它们。

【讨论】:

  • 谢谢,我知道 2 个进程如何通过共享内存/IPC 进行通信....但我问的是进程之间的资源。
  • 如果进程 A 有打开的文件句柄,这些文件句柄对 B 和 C 进程都可用,因此共享它们。
  • @John:我的立场是正确的。你是对的......我正在更新我的答案。你理所当然地应该得到积分。
  • @John:奇怪的是,在我学习过的两门操作系统课程中,从来没有人指出这一点。
  • 谢谢大家,我想很明显,当我说共享资源时,它的意思是 (memory, stack...) 而不是 (files) :) 。很棒的反应!!!
【解决方案2】:

1 - 2:有可能。

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

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

【讨论】:

  • 线程共享内存,但是,每个线程都执行新的进程——进程没有与线程共享的内容。所以我假设你的意思是不可能的,因为这是你在第二部分写的!
  • 进程 B 和 C 不共享内存,但它们可以共享其他资源。我想你误会了我。
  • 是的,可能我不清楚,我的意思是内存,访问堆/内存/变量....彼此的! ,而不是操作系统,也不是文件或硬件资源。 :)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    相关资源
    最近更新 更多