博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fork()函数、进程表示符、进程位置
阅读量:6167 次
发布时间:2019-06-21

本文共 1217 字,大约阅读时间需要 4 分钟。

linux、centos6.5

fork()函数:作用于创建子进程、返回值有两个,一个是向父进程返回它的pid,一个是返回0;

eg1:

1 #include
2 #include
3 int main() 4 { 5 fork(); 6 printf("aaaaaaaaa\n"); 7 return 0; 8 }

eg2:

1 #include
2 #include
3 #include
4 int g_val = 0; 5 int main() 6 { 7 pid_t id = fork(); 8 if(id < 0) 9 { 10 perror("fork error"); 11 } 12 else if(id == 0) 13 {
//child 14 g_val=100; 15 printf("I am child:pid:%d,ppid:%d,g_val:%d,&g_val:%p\n",\ 16 getpid(),getppid(),g_val,&g_val); 17 } 18 else 19 {
//Father 20 sleep(3); 21 printf("I am father:pid:%d,ppid:%d,g_val:%d,&g_val:%p\n",\ 22 getpid(),getppid(),g_val,&g_val); 23 } 24 sleep(1); 25 return 0; 26}

进程标识符主要看PID,PPID下图是部分进程表示符 

可以看到上面child和father各自的g_val值不一样,地址一样(虚拟地址)

值不一样是因为在fork()下,有两个分流,父子进程资源代码共享,但是数据是独自一份所以child的g_val=100;并不会影响father看到的g_val

 

不同的PCB他们及时他们的虚拟地址一样,因为不同的页表对应的物理地址可能不同,这也是进程独立性的表现 

 

转载于:https://www.cnblogs.com/JN-PDD/p/6896114.html

你可能感兴趣的文章
Alcatel-Lucent 7750 运营商认证设备在线用户数OID
查看>>
靠自己。linux manul手册入门
查看>>
思科设备中查询筛选的命令精华
查看>>
大数据未来将呈现的八大发展趋势
查看>>
cm 升级
查看>>
创建数据库快照并恢复数据
查看>>
我的友情链接
查看>>
APP抓包——Fiddler工具
查看>>
java 图片处理
查看>>
博主制作的开源JAVA WEB游戏-《天命.罗生门》
查看>>
Windows软链脚本
查看>>
IOS开发之异步加载网络图片并缓存本地实现瀑布流(二)
查看>>
足球赛事球员信息api
查看>>
那些年我们经历过的运维
查看>>
安装带有调试信息的C库
查看>>
迷宫的基本实现
查看>>
Ajax跨域请求问题
查看>>
topic4:Qt入门之常用qt控件认知之Button系列
查看>>
jstack:Java堆栈跟踪工具
查看>>
源码安装 python3
查看>>