首页 > 试题广场 >

下面哪些属于,Fork后子进程保留了父进程的什么?

[不定项选择题]
下面哪些属于,Fork后子进程保留了父进程的什么?
  • 环境变量
  • 父进程的文件锁,pending alarms和pending signals
  • 当前工作目录
  • 进程号

使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。

子进程与父进程的区别在于:

1、父进程设置的锁,子进程不继承(因为如果是排它锁,被继承的话,矛盾了)

2、各自的进程ID和父进程ID不同

3、子进程的未决告警被清除;

4、子进程的未决信号集设置为空集。 -mickole博客

编辑于 2015-09-15 15:29:25 回复(4)

正确答案是AC

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

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

  • 子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。
  • 经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争”
发表于 2017-03-30 10:09:23 回复(1)
如果父进程的进程号不保留的话,那PPID是什么?
发表于 2015-06-16 11:02:44 回复(3)

子进程与父进程的区别在于:锁、程ID

发表于 2019-07-30 17:25:49 回复(0)
子进程继承了一些与并发无关的资源。与进程和线程同步相关的锁没有继承。
发表于 2017-05-29 17:32:12 回复(0)

  对于父进程的文件锁,pending alarms和pending signals,子进程并没有继承。其原因,还是与创建子进程的目的相关。子进程的

创建是为了协助父进程完成相关任务,仅此而已。与此目的不相关的资源,子进程没有必要继承,继承了自会白白浪费内存资源。

发表于 2015-08-12 22:14:43 回复(1)
不继承锁
发表于 2020-05-01 19:44:36 回复(0)

使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。

子进程与父进程的区别在于:

1、父进程设置的锁,子进程不继承(因为如果是排它锁,被继承的话,矛盾了)

2、各自的进程ID和父进程ID不同

3、子进程的未决告警被清除;

4、子进程的未决信号集设置为空集。

发表于 2017-06-12 23:10:27 回复(0)
d
发表于 2015-01-11 17:58:03 回复(0)
A. 环境变量(Environment Variables) 父进程中设置的环境变量包括了一系列键值对,用来定义进程执行时的运行环境。这些环境变量可以影响程序的行为,比如搜索路径、语言设置、用户信息等。在调用fork()后,子进程会继承父进程的环境变量。这样可以确保子进程在执行时能够获得与父进程相同的运行环境,从而保证程序的一致性。

B. 父进程的文件锁、pending alarms和pending signals

  1. 文件锁(File Locks):在父进程中获取的文件锁不会被子进程保留。当父进程调用fork()创建子进程后,子进程会继承打开的文件描述符,但是文件锁状态不会被继承。这意味着子进程需要重新获取文件锁,而不会继承父进程已经获取的锁。

  2. Pending Alarms:在父进程中设置的定时器信号(Alarm Signals)也不会被子进程保留。当父进程调用fork()创建子进程后,子进程会继承父进程的信号处理函数,但是定时器信号的剩余时间不会被继承。子进程需要重新设置定时器信号,并根据需要执行相应的操作。

  3. Pending Signals:父进程中未决的信号(Pending Signals)在子进程中也不会被保留。当父进程调用fork()创建子进程后,子进程会继承父进程的信号处理函数和信号屏蔽字,但是未决的信号不会被继承。子进程开始时会将所有信号的未决状态清除,然后根据需要重新接收和处理信号。



C. 当前工作目录(Current Working Directory) 父进程的当前工作目录是指在执行命令时所处的目录。在调用fork()后,子进程会保留父进程的当前工作目录。这样做的好处是,子进程在执行时可以继续在相同的工作目录下进行操作,而不会影响到父进程的工作目录。这对于需要读取或操作特定目录下的文件的程序而言十分重要,因为子进程可以继续在正确的工作目录下执行操作,而不需要额外的调整。

编辑于 2023-11-16 11:36:08 回复(0)
进程id,进程相关的锁没有继承
编辑于 2024-01-29 20:54:19 回复(0)
进程ID和文件锁不继承
发表于 2022-06-17 09:46:48 回复(1)
环境变量 找到命令 方便跳转 当前工作目录 命令执行的位置
发表于 2022-04-10 02:37:10 回复(0)
锁不能被继承
发表于 2019-03-09 08:07:38 回复(0)
A、C
发表于 2015-08-28 17:16:28 回复(0)
abc
发表于 2015-07-12 01:57:32 回复(0)
ABC  ork出来的子进程,基本上除了进程号之外父进程的所有东西都有一份拷贝
发表于 2015-03-30 12:52:32 回复(1)