首页 > 试题广场 >

在Linux上,对于多进程,子进程继承了父进程的下列哪些?

[不定项选择题]
在Linux上,对于fork多进程,下列哪些内容是子进程可以从父进程继承的()
  • 进程地址空间
  • 共享内存
  • 信号掩码
  • 已打开的文件描述符
  • 以上都不是

正确答案是BCD

  • 参考CSDN BlogCSDN了解更多。
  • 子进程继承父进程
    • 用户号UIDs和用户组号GIDs
    • 环境Environment
    • 堆栈
    • 共享内存
    • 打开文件的描述符
    • 执行时关闭(Close-on-exec)标志
    • 信号(Signal)控制设定
    • 进程组号
    • 当前工作目录
    • 根目录
    • 文件方式创建屏蔽字
    • 资源限制
    • 控制终端
  • 子进程独有

    • 进程号PID
    • 不同的父进程号
    • 自己的文件描述符和目录流的拷贝
    • 子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
    • 不继承异步输入和输出
  • 父进程和子进程拥有独立的地址空间和PID参数。

  • 子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。
  • 经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争”                                  转自脱缰的哈士奇
发表于 2017-08-13 20:57:50 回复(5)
父进程和子进程拥有独立的地址空间和PID参数,所以子进程不会继承父进程的地址空间,故排除A。
发表于 2017-08-19 16:26:21 回复(0)

注意了!是继承!地址空间显然是互相独立的

但是这题目也有问题,文件描述符也是彼此独立的,只是在文件描述符表里存的struct file* 指针是父进程的一份拷贝,这一定要说继承也不合适。

信号掩码这样说还是完全没问题

发表于 2018-11-29 00:42:47 回复(0)
子进程独有:进程号PID,不同的父进程号,自己的文件描述符和目录流的拷贝,不继承父进程的进程正文,数据,和其他锁定内存,不继承异步输出输入。
子进程继承父进程:UID GID,环境,堆栈,共享内存,打开文件的描述符,执行时关闭标志,信号控制设定,进程组号,当前工作目录,根目录,文件方式创建屏蔽字,资源限制,控制终端。
子父进程拥有独立的地址空间和PID。
经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。
发表于 2019-07-31 22:46:15 回复(0)

摘自APUE
发表于 2018-04-09 18:47:12 回复(0)
是进程控制块,父进程和子进程有不同的地址空间
发表于 2020-08-20 14:03:15 回复(0)
A很明显是错误的,而BCD都是要继承的
发表于 2020-04-02 18:16:34 回复(0)
地址空间:子进程重新分配地址空间,跟父进程不掺和
信号掩码:每个进程都有一个信号掩码(signal mask),也称为信号屏蔽字,它规定了当前要屏蔽或要阻塞递送到该进程的信号集。对于每种可能的信号,该掩码中都有一位与之对应。对于某种信号,若其对应位(bit)已设置,则它当前是被阻塞的。简单地说,信号掩码是一个“位图”,其中每一位都对应着一种信号。如果位图中的某一位为1,就表示在执行当前信号集的处理程序期间相应的信号暂时被“屏蔽”或“阻塞”,使得在执行的过程中不会嵌套地响应那个信号。
编辑于 2019-06-17 09:50:40 回复(0)
参考CSDN Blog和CSDN了解更多。 子进程继承父进程 用户号UIDs和用户组号GIDs 环境Environment 堆栈 共享内存 打开文件的描述符 执行时关闭(Close-on-exec)标志 信号(Signal)控制设定 进程组号 当前工作目录 根目录 文件方式创建屏蔽字 资源限制 控制终端 子进程独有 进程号PID 不同的父进程号 自己的文件描述符和目录流的拷贝 子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks) 不继承异步输入和输出 父进程和子进程拥有独立的地址空间和PID参数。 子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。 经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争”                                  转自脱缰的哈士奇
发表于 2018-04-19 02:15:44 回复(0)
父进程和子进程拥有独立的地址空间和PID参数
发表于 2018-04-04 18:28:59 回复(0)
B选项 的共享内存是什么意思呢,是说和别的进程共享的内存也会被子进程继承下来么?
发表于 2017-09-11 10:03:54 回复(1)
BCD
发表于 2017-08-28 00:08:08 回复(0)