子进程是否与他的父进程共享任何资源?

Do sub process share any resources with his parent process?

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

"Creating an application process (A) which execute and creating 1st thread to execute an application (application process (B)). A 2nd thread may be created within the application process (A) to execute the agent program(thread or process C). Therefore, the application process (B) and the agent (thread or process C) may share operating system allocated resources."

我的问题是:

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

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

谢谢! 乔

1 - 2:有可能。

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

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

我最初对你的两个问题的回答是,但在 John 的评论之后,我要补充一点——根据父进程和子进程之间共享文件描述符的方式, 两个兄弟进程最终可能会在它们之间共享文件描述符。

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

父进程 A 可以与其子进程 B 和 C 共享文件描述符,因此 B 和 C 将共享文件描述符(由 OS 自行决定)。

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

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

typically, the child process performs only a small set of actions before it ceases execution of its program in favour of the program to be started, and it requires very few, if any, of its parent's data structures.

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

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