fork()时,子进程继承了父进程的进程组ID,所以父子进程默认属于同一个进程组,又因为同一个进程组的进程可以接受来自同一终端的各种信号所以当希望用键盘发送信号(如按下Ctrl+C)时,父子进程对接收到的父子进程有不同的处理方式时,那么子进程就不能继承父进程的处理该信号的函数,要在子进程的代码中单独注册处理该信号的函数。
fork()创建子进程就是父进程的一份拷贝,大部分属性都继承过来,但仍有部分属性不同。
- 子进程继承父进程属性。
》真实用户ID和组ID,有效用户ID和组ID。
》进程组ID
》session ID
》所有打开文件及文件的偏移量。
》控制终端
》设置用户ID和设置组ID标记位
》根目录和当前工作目录
》文件默认创建的权限掩码
》可访问的内存区段
》环境变量及其他资源分配
- 子进程不同父进程属性。
》进程ID
》运行时间记录,timer等
》父进程对文件的锁定
来源:父子进程属性异同
······················································································