子进程会继承父进程什么资源
1.实际UID和GID,以及有效的GID和UID
2.所有环境变量
3.进程组ID和会话ID
4.当前工作路径。除非用chdir()修改
5.打开的文件
6.信号响应函数
7.整个内存空间,包括栈、堆、数据段、代码段、标准I/O缓冲区等
子进程不会继承父进程什么资源
1.进程的进程号PID,PID号是身份证号码,每个进程的PID号都不一样
2.记录锁。父进程对某个文件加了锁,子进程不会继承这个锁
3.挂起的信号
本文主要验证继承资源的第七点
下面展示一些 内联代码片
。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc(),int *argv[])
{
//定义一个整型变量a
int a = 100;
pid_t pid = fork();
if(pid > 0)
{
//父进程让等0.01s让子进程先运行
usleep(10000);
a -= 10;
printf("father &a:%p\n",&a);
printf("father:a = %d\n",a);
}
if(pid == 0)
{
a -= 20;
printf("child &a:%p\n",&a);
printf("child:a = %d\n",a);
}
printf("2.%d,%p\n",a,&a);
return 0;
}
上图为代码的运行结果,子进程和父进程都打印了a的地址,结果是一样的,说明子进程并不是将父进程的资源复制一份,而是直接使用父进程的资源。而且他们对同一个变量进行操作不会相互影响,是因为子进程是在复制的副本对变量进行操作。